我有一个API接收请求并进行一些查询和验证。
我想使用response
函数中路由的findUserPlayer
引用,以便我可以向客户端发送内容。 findUser
函数将返回将在data
上使用的findUserPlayer
对象。
var api = express.Router();
api.post('/signup', function (request, response) {
UserModel.find(req.body)
.then(findUser, createUser)
.then(findUserPlayer, createUserPlayer);
});
var findUserPlayer = function (data, res) {
//...
res.json(object);
};
findUserPlayer(data, res)
,这样我就无法定义数据'。findUserPlayer(res)
,会覆盖data
。如何在回调中使用response
对象?
答案 0 :(得分:1)
您可以定义成功处理函数,然后调用findUserPlayer,而不是直接将 findUserPlayer 函数作为成功处理函数传递。
var api = express.Router();
api.post('/signup', function (request, response) {
UserModel.find(req.body)
.then(findUser, createUser)
.then(function(data) {
return findUserPlayer(data, response);
}, createUserPlayer);
});
var findUserPlayer = function (data, res) {
//...
res.json(object);
};
答案 1 :(得分:1)
JavaScript是一种非常灵活的语言,这意味着您可以通过多种方式处理此问题,最简单的方法之一(就最小代码更改而言)是颠倒findUserPlayer
中的参数顺序并绑定您的上下文( .bind(response)
)。
但那将是一个糟糕的设计选择。找不到用户的功能没有理由"处理回应或json。它的功能范围和责任不在此范围内。请求处理程序是应该处理格式化相关响应的处理程序,我通过在promise链中返回相关数据并最终执行此操作:
.then(function(data) {
response.json(data);
});
答案 2 :(得分:1)
我是lodash的忠实粉丝,有时也是一个错误,但我想我会使用lodash的partialRight函数添加以下内容。
var _ = require('lodash');
...
UserModel.find(req.body)
.then(findUser, createUser)
.then(_.partialRight(findUserPlayer, response), createUserPlayer);
_.partialRight
返回一个新函数,其中partials附加到新函数。 _.partialRight
的第一个参数是我们想要追加参数的函数。后续参数是我们想要附加到函数的参数。
我假设以下函数签名:findUserPlayer(data, response)
。 _.partialRight
将响应对象附加到新函数。新功能签名现在看起来像这样:function (data)
。