意外的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上拥有最多的星星。 你可以在这个链接获得教程。