我目前正在使用MEAN堆栈创建一个网站,我差不多完成了,但是“用户编辑他/她的个人资料”部分存在问题。当用户编辑任何ALONG WITH编辑他/她的生日时,编辑工作正常并且所有内容都在数据库中更新,但是当birthdate字段为空时,我在节点中收到以下错误:
UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):ValidationError:CastError:Cast to Date因路径“birthdate”的值“无效日期”失败
这是我的nodejs代码:
exports.editInformation = function(req, res) {
var id = req.params.userID;
var body = req.body;
User.findOne({_id:id}, function(err, user) {
if(err)
res.send("error");
else {
if(!user)
res.send("user not found");
else {
if(body.name)
user.name = body.name;
if(body.birthdate)
user.birthdate = new Date(body.birthdate);
if(typeof body.phone != "undefined" && body.phone.length > 0)
user.phone = body.phone;
if(typeof body.gender != "undefined" && body.gender.length > 0)
user.gender = body.gender;
if(typeof body.address != "undefined" && body.address.length > 0)
user.address = body.address;
if(typeof body.email != "undefined" && body.email.length > 0)
user.email = body.email;
if(typeof file != "undefined")
user.profilePic = file.filename;
user.save();
}
}
});
}
答案 0 :(得分:0)
错误消息说明原因:
ValidationError:CastError:Cast to Date因值"无效日期"在路径" birthdate"
它建议body.birthdate
评估为true
(可能包含空格或其他内容?),但new Date(body.birthdate)
会产生无效日期。
由于您未处理user.save()
引发的任何错误,因此您获得了UnhandledPromiseRejectionWarning
。您也没有发回任何回复。
所以你应该修复两个问题:在调用new Date(body.birthdate)
之后,你应该检查日期是否真的有效:
if (body.birthdate) {
user.birthdate = new Date(body.birthdate);
if ( isNaN( user.birthdate.getTime() ) ) {
return res.send('error'); // or whatever response you deem appropriate
}
}
此外,您应该处理save
引发的错误并采取相应措施:
user.save(function(err) {
if (err) return res.send('error');
res.send('okay');
});