我想拦截所有响应使用了 oldSend.call 陷入了循环,我该怎么正确的发出响应,这是我的代码 const resInterc = (req, res, next) => { var oldSend = res.send; // 备份原始的 send 方法 res.send = (resData) => { let { code, msg, data, err } = resData resData = { code: code || '200', msg:'', data: data } oldSend.call(res, resData); // 调用原始的 send 方法发送响应 }; next(); // 调用 next() 方法将控制权交给下一个中间件 } app.use(resInterc);
时间: 2024-01-23 21:03:20 浏览: 101
axios的拦截请求与响应方法
5星 · 资源好评率100%
你可以把原始的 send 方法备份为 oldSend,然后在重写的 send 方法中对数据进行处理后,直接调用 oldSend 方法发送响应。但是在你的代码中,重写的 send 方法又调用了 oldSend 方法,导致陷入了循环。为了避免这种情况,你可以使用 res.end() 方法来结束响应并发送数据。修改后的代码如下所示:
```
const resInterc = (req, res, next) => {
const oldSend = res.send; // 备份原始的 send 方法
res.send = (resData) => {
const { code, msg, data, err } = resData;
const sendData = {
code: code || '200',
msg: msg || '',
data: data || {},
};
oldSend.call(res, sendData); // 调用原始的 send 方法发送响应
res.end();
};
next();
};
app.use(resInterc);
```
这样修改后,当你调用 send 方法时,会触发重写的 send 方法,该方法会对数据进行处理后,调用原始的 send 方法发送响应,并使用 end 方法结束响应,避免了陷入循环的问题。
阅读全文