需求
将前端的所有请求转发到其他网站,并将 response 返回给前端
实现
router.all('/*', function (req, res, next) {
let jar = request.jar();
// 以下三步可对不同的 cookie 循环调用
let cookieStr = 'key=' + req.cookies['key'];
let cookie = request.cookie(cookieStr);
jar.setCookie(cookie, config.host + req.url);
const p = request(config.host + req.url, {
method: req.method,
form: _.clone(req.body),
jar: jar
});
req.pipe(p);
p.pipe(res);
p.on('error', handleError(next));
});
期间遇到的问题
- post 请求带有 form 的时候会报错:write after end
解决方法:将
req.pipe(p)
那一行注释掉,但是却不明白为什么,很难受 详见:https://github.com/request/request/issues/1664 - 不能传输文件
未解决,将
req.pipe(p)
会一直 pending,取消注释以后会报 too many parameters - 怪象:将
form: _.clone(req.body),
注释掉以后,居然会提示 user not login 这个不算 bug 吧,只是感觉奇怪
如何改进这个方法才能完全解决上面所说的问题
不好意思再次麻烦各位大佬,但是实在没辙了 心乱如麻,表达估计不太准确,有兴趣的大佬可以来拍