繁体   English   中英

修改 express.js res.send function 后不会发出任何数据

[英]After modifying express.js res.send function it won't emit any data

基本上我想做的是统一我的应用程序的每个响应,让它们看起来像这样

{
  success: true,
  error: "Error description",
  errorCode: "SomeError",
  data: {
    ...
  }
}

到处复制和粘贴这个结构以及包装器 function 对我来说看起来很丑陋,所以我尝试修改send function 以便它接受 4 个参数而不是仅 1 个,然后生成给定的结构。

我找到了有关如何修改send function 的各种示例并想出了这个中间件

app.use(function (req, res, next) {
  const oldSend = res.send;

  res.send = function (data = {}, success = true, error = '', errorCode = '') {
    let response = {
      data,
      success,
      error,
      errorCode
    };

    oldSend.apply(res, response);
  };

  next();
});

所以 res.send 调用看起来像这样

res.json(req.session.key != null, true, null, null);

哪个工作正常,除了它不向客户端返回任何响应。 你能帮我解决这个问题吗? 是否有可能实现预期的行为?

You are using function.apply which expects a this and then an array of the function arguments (see MDN for function.prototype.apply ). 您需要使用的是function.call (再次参见MDN 的 function.prototype.call )。

但是,要注意覆盖 express(或任何库)的低级部分 - 您不知道还有什么可能会调用它,因此您可能会得到一些意想不到的结果。 您可能想检查(例如)提供的参数是否属于您期望的类型(例如对象),并将任何意外(例如Buffer )直接传递给原始发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM