"hook" 到 app.response 函数的正确方法是什么?
What is the correct way to "hook" into app.response functions in express?
我需要在 app.json 被调用后向 app.json 和 app.jsonp 响应添加一些数据,向其中添加中间件的正确方法是什么?我知道我可能会做类似的事情:
var jsonTemp = function(status, data) {
if (!data) {
data = status;
status = 200;
}
data.extraValue = 'foo';
res.json(status, data);
}
res.json = jsonTemp;
但是像这样的猴子补丁看起来像 "bad idea"。有没有一种官方方法可以使用某种中间件连接到响应中?
我认为猴子补丁实际上可能是最好的解决方案,而无需更多地了解您要解决的问题。但是,您显示的代码确实会使服务器崩溃,因此请不要使用它。
app.use(function (req, res, next) {
var orig = res.json;
res.json = function json(status, data) {
if (!data) {
data = status;
status = 200;
}
data.extraValue = 'foo';
orig.call(this, status, data);
};
next();
});
这里我将原始函数存储在变量 orig
中,然后在完成修改后委托给那个函数。您的代码一遍又一遍地调用您修改后的函数,因为那个函数现在位于 res.json
.
下
您可以注册自己的 template engine 来格式化您的输出。也许这有帮助。
我需要在 app.json 被调用后向 app.json 和 app.jsonp 响应添加一些数据,向其中添加中间件的正确方法是什么?我知道我可能会做类似的事情:
var jsonTemp = function(status, data) {
if (!data) {
data = status;
status = 200;
}
data.extraValue = 'foo';
res.json(status, data);
}
res.json = jsonTemp;
但是像这样的猴子补丁看起来像 "bad idea"。有没有一种官方方法可以使用某种中间件连接到响应中?
我认为猴子补丁实际上可能是最好的解决方案,而无需更多地了解您要解决的问题。但是,您显示的代码确实会使服务器崩溃,因此请不要使用它。
app.use(function (req, res, next) {
var orig = res.json;
res.json = function json(status, data) {
if (!data) {
data = status;
status = 200;
}
data.extraValue = 'foo';
orig.call(this, status, data);
};
next();
});
这里我将原始函数存储在变量 orig
中,然后在完成修改后委托给那个函数。您的代码一遍又一遍地调用您修改后的函数,因为那个函数现在位于 res.json
.
您可以注册自己的 template engine 来格式化您的输出。也许这有帮助。