【发布时间】:2017-12-28 05:10:06
【问题描述】:
我正在尝试构建一个注册api服务,第一步是检查用户电子邮件是否存在,如果存在服务器将发送“电子邮件存在”响应,否则用户将成功保存在数据库中(mongoDB )。
她是代码:
userRoutes.post('/signup', function(req, res) {
if (!req.body.email || !req.body.password || !req.body.firstname || !req.body.lastname || !req.body.gender || !req.body.country || !req.body.town || !req.body.isTrainer) {
res.json({ success: false, msg: 'set up required fields' });
} else {
var newUser = new User({
email: req.body.email,
password: req.body.password,
firstname: req.body.firstname,
lastname: req.body.lastname,
gender: req.body.gender,
country: req.body.country,
town: req.body.town,
isTrainer: req.body.isTraine
});
User.find({ email: req.body.email}, function(res,err, user){
if (err) {
res.send({success: false, msg:'authentication error'})
console.log(err);
}
else if (user.length != 0) {
res.send({success: false, msg:'Email already exists'})
console.log(err, 'email already exists'+email);
}else {
// save the user
newUser.save(function(err) {
if (err) {
console.log(err);
}
res.send({ success: true, msg: 'Your account created successfully! ' });
});
}
})
}
});
我收到了这个错误:
events.js:160 throw er; // Unhandled 'error' event ^ TypeError: Cannot read property 'send' of null
【问题讨论】:
-
因为你从这里的路由“覆盖”了响应对象。
User.find({ email: req.body.email}, function(res,err, user)相反,这样的调用应该是User.find({ email: req.body.email}, function(err, user)其中err总是首先出现。没有必要像您认为自己正在做的那样“传递变量”。它们已经在“当前范围”内。 -
感谢您的评论! +1