基本上我想做的就是统一我的应用程序的每个响应,以使它们看起来像这样
{
success: true,
error: "Error description",
errorCode: "SomeError",
data: {
...
}
}
在任何地方复制和粘贴此结构以及包装函数对我来说都很难看,因此我尝试修改send
函数,使其接受4个参数而不是仅接受1个参数,然后构造给定的结构。 / p>
我找到了有关如何修改send
函数的各种示例,并提出了此中间件
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);
除了不会向客户端返回任何响应之外,其他都可以正常工作。你能帮我解决这个问题吗?有可能实现预期的行为吗?
答案 0 :(得分:1)
您正在使用function.apply
,它需要一个this
,然后是一个函数参数数组(请参见MDN for function.prototype.apply)。您需要使用的是function.call
(再次参见MDN for function.prototype.call)。
但是,要小心一点,要小心覆盖Express(或任何库)的低级部分-您不知道还有什么可能被调用,所以您可能会得到一些意想不到的结果。您可能想检查(例如)提供的参数是否属于您期望的类型(例如,对象),并将任何意外内容(例如,Buffer
)直接传递到原始发送。