1

我正在使用带有 node.js 的 Expressjs,并且我有这样的路线:

    users.init(app.db, function() {

        users.checkUsername(user.username, function(err, count) {
            if (count > 0) {
                res.json({'username': 'unavailable'});
            }
        });

        users.checkEmail(user.email, function(err, count) {
            if (count > 0) {
                res.json({'email': 'unavailable'});
            }
        });

        users.insertUser(user, function(err, response) {
            res.json({'success' : 'true'});
        });

    })  

例如,在某些情况下,这将打印发送多个响应、用户名和电子邮件。

这条路线是通过 ajax 调用的,在 php 中,我通常exit()在回显一个 json 响应后执行一个。有没有办法在 Expressjs 中做到这一点?

谢谢!

编辑:我可以将所有内容包装在 if/else 中或在每个内容中设置一个标志,但只是看看是否有更优雅的方式。

4

1 回答 1

2

您不能使用“多次响应”(无论这意味着什么)res.json- 每次使用它时,它都会将数据发送到客户端并最终确定响应。您需要将结果保存(并更新)在变量中并在最后发送。

现在我可以为你想出两种可能性:

  • 嵌套回调实际上很烦人但有时是必要的(例如,第二次调用取决于第一次调用);

  • 异步回调队列在回调中检查是否所有其他回调都完成了工作。如果是这样,请作出回应。自己实现它可能有点棘手,所以尝试例如一个优秀的异步库。

于 2012-04-06T16:22:20.500 回答