【发布时间】:2017-02-21 10:57:09
【问题描述】:
我使用 express() 构建了多种方法。为简单起见,假设我构建了 2 个 POST() 函数,并且我希望能够自己使用它们,并通过中间件将它们连接起来以进行组合使用。
app.post('/create_obj_1' , function (req,res) {
//create Object_type_1
// send Object_type_1 via EXTERNAL API to somewhere
res.json({{ "statusCode": 200, "message": "OK" }
}
app.post('/create_obj_2' , function (req,res) {
//create Object_type_2
// send Object_type_2 via EXTERNAL API to somewhere
res.json({{ "statusCode": 200, "message": "OK" }
}
我想要一个新的 POST() 可以调用其他两个(但仍然支持独立调用原始 2 我认为可以通过中间件实现,但我不确定如何——这就是我认为新的 POST() 应该是什么样子的——
app.post('/create_obj_all' , function (req,res) {
//I want to invoke the create_obj_1 & create_obj_2 , check all OK, and finish
res.json({{ "statusCode": 200, "message": "OK" }
}
我不确定在这种情况下如何处理中间件的使用。
最重要的是-如何将它们连接起来以相互使用资源?假设 EXTERNAL API 从 obj_1 创建中返回一些值,我想在 obj_2 post() 函数中使用它..
我尝试在 middlware_1 中使用 request() 的伪代码 -
var middle_1 = function (req, res, next) {
req.middle_1_output = {
statusCode : 404,
message : "fail_1"
}
var options = {
method: 'PUT', url: `EXTERNAL_API`, headers:
{
'cache-control': 'no-cache',
'content-type': 'application/x-www-form-urlencoded',
apikey: `KEY`
}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
// CODE THAT DO SOMETHING AND GET INFORMATION
// OLD WAY OF res.send here , to allow using in post.POST() was - res.status(200).send(body);
//res.status(200).send(body);
req.middle_1_output.statusCode = 200;
req.middle_1_output.message = "hello world";
});
next(); // trigger next middleware
}
【问题讨论】:
-
您必须像我在第二个示例中所做的那样,从回调中调用
next。在您的情况下,在完成request之前调用下一个中间件。 -
Hey Blaze ,我认为它开始起作用了,但是我遇到了一个问题,因为我在 middleware_1 中使用了 2 request() (一个接一个),所以我想调用下一个( ) 在第一个 request() 结束时,为第二个 request() 造成问题,因为当我尝试在第二个结束时为其分配一个值时,我收到 req.middle_1_output.statuscode is 'undefined' 的错误要求()。我是否需要将 middleware_1 中的第一个 request() 本身也变成中间件?
-
更新你的问题,我将通过编辑我的最后一个答案来回答。
标签: node.js express middleware