【问题标题】:How do I return an error message to the client after failed Mongoose validation in Express在 Express 中 Mongoose 验证失败后如何向客户端返回错误消息
【发布时间】:2012-12-12 10:54:22
【问题描述】:

我有一个非常基本的 POST 路由,可以根据给定的数据创建一个新用户。

我是这样保存的:

app.post('/create', function(req, res){
    var firstUser = new models.User(req.body);
    firstUser.save();
});

我的 Mongoose 用户架构有一些验证选项,它们很有效。如果我传递了错误的数据,验证将失败并且不会创建用户。

但是有一个问题:Mongoose的save()函数是异步的,那我现在怎么让客户端验证失败呢?

到时候post功能就完成了。

【问题讨论】:

    标签: node.js express mongoose


    【解决方案1】:

    你应该看看Mongoose documentation。因为 save 方法是异步的,所以它需要一个回调作为参数。这是您应该检查错误的地方。

    app.post('/create', function(req, res){
        var firstUser = new models.User(req.body);
        firstUser.save(function (err) {
            if (err) {
                res.send(500, { error: 'Saving first user failed!' });
            } else {
                res.send({ success: 'Saved!' }); 
            }
        })
    });
    

    【讨论】:

    • 啊,我以为一旦 post() 函数完成后,您就无法再向客户端发送任何内容了。
    • 实际上是调用 res.end() 来结束函数。 res.send() 在响应中添加一些东西,然后调用这个函数。
    • 最好使用 next 来处理错误,因为这就是它的用途。它还将您所有的错误处理放在一个中间件处理程序中,而不是在整个项目中重复自己。
    • @Pickels 你能否添加一个答案来说明在这种情况下使用 next ?
    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 2019-01-26
    相关资源
    最近更新 更多