2017-01-11 2 views
1

Je travaille sur l'application node js et en utilisant Diskdb comme base de données. Il donne erreur première fois comme suit:Erreur de fin inattendue d'entrée qui vient la première fois en utilisant DiskDB

undefined:0 

^ 
SyntaxError: Unexpected end of input 

Dans la documentation que j'ai trouvé la solution de ce que « s'il vous plaît assurez-vous qu'il contient un tableau JSON valide, sinon diskDB retourne un tableau vide. » Alors quelqu'un peut-il me suggérer comment puis-je vérifier ce fichier contient le tableau json ou non?

Je collection chargement à l'aide

db.loadCollections(['users']); 
var u = db.users.findOne(); 
console.log(u); // [] 

Comment puis-je vérifier [] existe ou non dans le fichier?

Une autre question est de savoir comment tester l'enregistrement existe ou non avec plusieurs conditions dans diskdb.

par exemple. en users.json contient

[{"email":"[email protected]","password":"123","status":"1","_id":"e39a62a9c7b94d76892f9c3bdfa22715"}] 

et mon code à l'aide que je vérifie est la suivante:

db.loadCollections(['users']); 

var preCheck = db.users.find({"email" : req.body.email,"password" : req.body.password}); 
    if(preCheck !== undefined){ 

     if((preCheck.email == req.body.email) && (preCheck.password == req.body.password)){ 
      //logged in 

      req.session.email = req.body.email; 
      req.session.userId = preCheck._id; 
      req.flash('success','Successful Login'); 
      res.redirect('/option'); 
     } 
     else{ 

      req.flash('error','Email Id or Password is Incorrect'); 
      res.redirect('/login'); 
     } 
    } 

mais il ne me permet pas de se connecter.

Merci!

+0

'db.users.find' renvoie le tableau, essayez' findOne' –

Répondre

1

J'espère que cela vous aidera.

var db = require('diskdb'); 
db = db.connect('data', ['users']); // it connects and loads the collection 

var preCheck = db.users.findOne({ 
    "email" : req.body.email, 
    "password" : req.body.password 
}); 

if(preCheck){ 
    //logged in 
    req.session.email = req.body.email; 
    req.session.userId = preCheck._id; 
    req.flash('success','Successful Login'); 
    res.redirect('/option'); 
} else{ 
    req.flash('error','Email Id or Password is Incorrect'); 
    res.redirect('/login'); 
} 
+0

non cela ne fonctionne pas. mais merci d'essayer. – 981

+0

J'ai mis à jour la réponse. Ça devrait marcher. Ça marche dans mon cas. –

+0

La requête fonctionne comme une condition OU plutôt que comme ET – 981

0

En tant que votre DB vide ou contient les données suivantes json.

[{"email":"[email protected]","password":"123","status":"1","_id":"e39a62a9c7b94d76892f9c3bdfa22715"}] 

findOne() affiche uniquement la première ligne d'enregistrement de votre collection. Vous pouvez soit filtrer cela ou non, cela dépend de vos besoins.

Utilisez le find() dans votre code, que vous utilisez déjà:

var preCheck = db.users.find({"email" : req.body.email,"password" : req.body.password}); 
if(preCheck.length !== 0){ 
    if((preCheck[0].email == req.body.email) && (preCheck[0].password == req.body.password)){ 

    req.session.email = req.body.email; 
    req.session.userId = preCheck[0]._id; 
    req.flash('success','Successful Login'); 
    res.redirect('/option'); 
    } 
    else{ 
    req.flash('error','Email Id or Password is Incorrect'); 
    res.redirect('/login'); 
    } 
} 
else{ 
req.flash('error','Email Id or Password is Incorrect'); 
res.redirect('/login'); 
} 

Comme les données seront dans le tableau de JSON afin d'utiliser il preCheck[0] pour obtenir les données. Votre requête fonctionne comme AND condition. Pour plus de détails, vous pouvez consulter son GitHub Link.

Remarque: Je suggère d'utiliser sqllite3 comme base de données. C'est asynchrone (presque un must-have), c'est le plus activement maintenu, et il a le plus d'étoiles sur GitHub. Vous pouvez obtenir le tutoriel au this Link.

+0

Est-ce que cela va créer un tableau vide par défaut dans ma collection? – 981

+0

oui, quand vous appelez 'db.loadCollections (['users']);' il créera le fichier json de collection ainsi que le tableau vide dans celui-ci. – Deep