gpt4 book ai didi

node.js - 登录时未定义的属性

转载 作者:搜寻专家 更新时间:2023-11-01 00:01:37 25 4
gpt4 key购买 nike

当我输入数据库中存在的用户名时,一切正常,用户登录。但是当我输入其他内容时,应用程序崩溃并显示错误消息:

user[0].userName TypeError: Cannot read property 'userName' of undefined

并指向 var userdb= user[0].userName;

当我使用 console.log 时,它工作正常并且显示了变量..有任何想法吗?谢谢。

app.post('/logMeIn', function(req, res) {    
var inputUsername = req.body.username;
userModel.find({userName: inputUsername}, function(err, user) {
var userdb= user[0].userName;
if (err) console.log('User does not exist in the database.');
else if (inputUsername!=userdb) console.log("User does not exist");
else console.log("You are logged in.");
});
});

最佳答案

当您键入 Users 集合中不存在的用户名之类的内容时,mongoose 的查找游标会在查询中返回一个空对象。由于您要检查提供的用户名是否存在于用户集合中,因此您只需要使用 findOne() 找到一个包含该用户名的文档。或 find() 方法。

findOne() 方法似乎是正确的选择,因为如果您在 userName 字段上放置了索引,则可以查询相关索引并查看如果返回文档或 None,最好使用覆盖索引。

但是,将 find()limit() 一起使用要快得多,因为 findOne() 将始终读取并返回文档(如果存在)。 find() 仅返回(或不返回)游标,并且仅在遍历游标时才读取数据。

然后您需要检查结果是否为空,然后仅根据空检查得出用户不存在的结论:

findOne() 实现:

app.post('/logMeIn', function(req, res) {    
var query = userModel.where({ userName: req.body.username });
query.findOne(function (err, user) {
if (err) return console.log('User does not exist in the database.');
if (user) {
// user may be null if no document matched, check for null
if (user !== null && typeof(user) !== 'undefined' && user.length > 0) console.log("You are logged in.");
else console.log("User does not exist.");
}
});
});

find() 实现:

app.post('/logMeIn', function(req, res) {    
var query = userModel.find({userName: req.body.username}).limit(1);
query.exec(function(err, user) {
if (err) return console.log('User does not exist in the database.');
if (user) {
// user may be null if no document matched, check for null
if (user !== null) console.log("You are logged in.");
else console.log("User does not exist.");
}
});
});

关于node.js - 登录时未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29129641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com