意外的input错误结束,这是第一次使用DiskDB

我正在研究节点js应用程序并使用Diskdb作为数据库。 它第一次发生错误如下:

 undefined:0 ^ SyntaxError: Unexpected end of input 

在文档中,我发现这个解决scheme是“请确保它包含一个有效的JSON数组,否则, diskDB将返回一个空的数组”。 那么可以任何一个build议我如何检查这个文件包含json数组或不?

我正在使用加载收集

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

我如何检查[]是否存在或不存在?

还有一个问题是我该如何testinglogging是否存在或不在diskdb中的多个条件。

例如在users.json中包含

 [{"email":"noname@email.com","password":"123","status":"1","_id":"e39a62a9c7b94d76892f9c3bdfa22715"}] 

和我使用的代码,我正在检查如下:

  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'); } } 

但它不允许我login。

谢谢!

希望它可以帮助你。

 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'); } 

因为您的数据库将清空或包含以下json数据。

 [{"email":"noname@email.com","password":"123","status":"1","_id":"e39a62a9c7b94d76892f9c3bdfa22715"}] 

findOne()只显示你的集合的第一行logging。 您可以过滤或不过滤,这取决于您的要求。

在你的代码中使用你已经使用的find()

 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'); } 

由于数据将在json数组中,所以使用preCheck[0]来获取数据。 您的查询是作为AND条件。 有关更多详细信息,您可以检查其GitHub链接 。

注意:我build议使用sqllite3作为数据库。 它是asynchronous的(几乎是必须的),它是最积极的维护,它在GitHub上拥有最多的星星。 你可以在这个链接获得教程。