当日期为空时,UnhandledPromiseRejectionWarning

时间:2017-04-20 09:43:21

标签: javascript angularjs node.js mongoose mean-stack

我目前正在使用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();
                }
            }
        });
}

1 个答案:

答案 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');
});