Node.js 正确的方法是什么;钩;进入express中的app.response函数?

Node.js 正确的方法是什么;钩;进入express中的app.response函数?,node.js,express,middleware,Node.js,Express,Middleware,在调用app.json之后,我需要在express中的app.json和app.jsonp响应中添加一些数据,向其中添加中间件的正确方法是什么?我知道我可能会做一些类似的事情: var jsonTemp = function(status, data) { if (!data) { data = status; status = 200; } data.extraValue = 'foo'; res.json(status, data); } res.json

在调用app.json之后,我需要在express中的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;

但是猴子那样打补丁似乎是个“坏主意”。有没有一种官方的方法可以通过某种中间件连接到响应中?

我认为猴子补丁实际上可能是最好的解决方案,而不知道您试图解决什么问题。但是,您显示的代码确实会使服务器崩溃,所以不要使用它

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

下,我认为在不了解您试图解决的问题的情况下,monkey patching实际上可能是最好的解决方案。但是,您显示的代码确实会使服务器崩溃,所以不要使用它

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

下,您可以注册自己的函数以格式化输出。也许这会有帮助。

您可以注册自己的文件以格式化输出。也许这会有帮助。

不清楚你所说的“与回应挂钩”是什么意思?响应是一个对象。请求就是事件。你的意思是“hook into the request”吗?你可以为URL编写中间件并在其中插入逻辑对不起,如果我不清楚,我需要能够在调用rest.JSON后向JSON结果添加数据,这样就不能在通常的中间件位置执行,因为它发生在标准处理程序之后。不清楚你的意思是什么“钩住响应”?响应是一个对象。请求就是事件。你是说“钩住请求”“不知怎的?你可以为URL编写中间件并在其中插入逻辑抱歉,如果我不清楚,我需要能够在调用rest.JSON之后将数据添加到JSON结果中,这样就不能在通常的中间件位置执行,因为它发生在标准处理程序之后。创建JSON视图呈现程序似乎是一个坏习惯,在JSON被发送回用户之前访问它。我同意。顺便问一下,为什么需要在生成JSON后更改JSON输出?你能举个使用的例子吗?也许我们可以想出更好的方法来解决这个问题。目前,如果不支持cookie,我需要将会话cookie作为JSON值传递。是的,我可以在每次生成JSON时添加一个函数调用,但有超过5个文件的50多次使用,丢失或忘记添加它只会导致错误(仅在不支持cookies的地方,这将很难调试)。我可以想象其他用途,如通过向所有字段添加SHA-1校验和来添加防止中间人攻击的篡改保护。创建json视图呈现程序似乎是一个糟糕的黑客行为,只需在json发送回用户之前访问它。我同意。顺便问一下,为什么需要在生成JSON后更改JSON输出?你能举个使用的例子吗?也许我们可以想出更好的方法来解决这个问题。目前,如果不支持cookie,我需要将会话cookie作为JSON值传递。是的,我可以在每次生成JSON时添加一个函数调用,但有超过5个文件的50多次使用,丢失或忘记添加它只会导致错误(仅在不支持cookies的地方,这将很难调试)。我可以想象其他用途,比如通过在所有字段中添加SHA-1校验和来增加中间人攻击的篡改保护。