Mongoose的save()方法中的错误处理

7

当保存文档到我的MongoDB数据库时出现错误,我一直在尝试向浏览器发送消息。 我使用Mongoose作为其包装器。

这是我的signup.js

var mongoose = require('mongoose');
var models = mongoose.models;

exports.user = function(req, res){
    var u = new models.Users(req.body);

    u.save(function(err, user) {
        if (err) {
            console.log(err);
            res.send(400, 'Bad Request');
        }

        res.redirect('/');
    });
};

如果检测到了一个错误,它会将错误信息显示在日志中,但不会向浏览器发送“错误请求”的响应。我这样做错了吗?
3个回答

8
res.redirect('/');之前加上else。很可能是先发送400,然后重定向到/。

1
哇,我怎么这么笨啊。谢谢你,老兄! - Jahm
1
最好在 if 语句内的 res.send(400, 'Bad Request'); 后添加 return。如果函数是您发布的那个函数。 - Blue Bot

3

或者,您可以return res.redirect('/');以停止代码执行。


3

使用 Promises 更好,它为我解决了问题

我遇到类似的问题,并通过使用在你的示例中返回的 Promise 来解决它。

var mongoose = require("mongoose");
var models = mongoose.models;

exports.user = function (req, res) {
var u = new models.Users(req.body);

u.save()
    .then((user) => {
        // If everything goes as planed
        //use the retured user document for something
         res.redirect("/");
    })
    .catch((error) => {
        //When there are errors We handle them here
        console.log(err);
        res.send(400, "Bad Request");

    });

};


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接