我开始学习mongo来创建一个小的登录表单验证。目前,我正试图将我从POST req收到的用户名与数据库中的值进行比较,我想到的示例代码就是下面的示例代码。
app.post('/login', urlencodedParser, function(req, res){
username = req.body.username;
password = req.body.password;
MongoClient.connect(urldb, function(err, db){
var dbo = db.db('LCC');
var query = {_id: username, password: password}
var output = dbo.collection('Users').find(query)
if(output == username){
console.log('Found');
}else{
console.log('Not found');
}
db.close();
res.end();
});
});
我不确定使用的find方法是否适用于这种情况,但看起来它有效,问题是我如何使用当我这样做时返回给我的对象。找到(查询)?这是比较的还是我完全错误的方向?
刚刚发布这个样本,因为我认为已经足够了,但如果需要,我会展示更多。提前谢谢。
答案 0 :(得分:2)
您的代码中存在多个问题
从此
更改您的查询 var query = {_id: username, password: password}
到
var query = {username: username, password: password}
然后使用.find(query)
而不是使用.findOne(query)
因为find返回对象数组。
然后因为查询是asynchronous,您不应该像var output = dbo.collection('Users').find(query)
那样分配它而是使用callback这样的函数
dbo.collection('Users').find(query, function(err, user){
if(err) throw new Error(err);
if(!user)
console.log('Not found');
else
console.log('Found!');
})
你似乎也是node.js的新手。转到w3school https://www.w3schools.com/nodejs/nodejs_mongodb_query.asp以更加基本地了解node和mongodb的工作原理