使用请求模块的Node.JS代理

杰加德什

我有一个Express.JS应用程序,该应用程序使用请求节点模块对路由进行代理调用。在NodeJS V0.10.28上运行良好。但是,升级到NodeJS V4.4.7导致失败—引发错误“错误:结束后写入”。

我是NodeJS的新手。非常感谢您的帮助。

var bodyParser=require('body-Parser');
app.use(bodyParser.json({limit: '100mb'}));
app.use(bodyParser.urlencoded({extended: false}));

....
....

app.use('/relay', function (req, res) {
        var request = require('request'),
            proxyUrl = 'http://abc.proxy.xyz:12345',
            apiEndPoint = "https://aaa.bbb.ccc/svc";

        req.pipe(request.post(apiEndPoint,{ proxy: proxyUrl, form: req.body}, function (error, response, body) {

            if (error) {
                console.log(error)
            } else {
                console.log("No error here.")
            }

            res.end();

        })).pipe(res);   
});
杰加德什

为了后代,这是我的解决方案,以防其他人遇到同样的问题。

问题出在使用中间件body-parser:body-parser读取请求以完成操作-因此流已到达末尾。因此,问题中显示的/ relay路由中的req.pipe()没有任何要读取的内容,并且不会重新启动流。

但是,返回的错误消息“ end after after”非常模棱两可。为什么我没有遇到Node.JS V0.10.28这个问题也是一个谜。在V4.4.7中注意到了所报告的问题

因此,要解决body-parser问题,我将/ relay路由移到了对body-parser的调用之上:

app.use('/relay', function (req, res) {
        var request = require('request'),
            proxyUrl = 'http://abc.proxy.xyz:12345',
            apiEndPoint = "https://aaa.bbb.ccc/svc";

        req.pipe(request.post(apiEndPoint,{ proxy: proxyUrl, form: req.body}, function (error, response, body) {

            if (error) {
                console.log(error)
            } else {
                console.log("No error here.")
            }

            res.end();

        })).pipe(res);   
});

....
....

var bodyParser=require('body-Parser');
app.use(bodyParser.json({limit: '100mb'}));
app.use(bodyParser.urlencoded({extended: false}));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用请求模块抓取Node.js

使用Python“请求”模块的代理

使用Python“请求”模块的代理

如何在Node.js Lambda中使用请求模块

使用Node.js请求模块的Amazon Lex Facebook集成

如何使用node.js请求模块发送文件?

node.js使用请求模块返回文件的内容

代理选项在Node.js的请求模块中不起作用

无法使用node.js和“请求”模块向UTF-8链接发出请求

如何使用请求模块 -Node js 提取来自 url 的请求的域名

使用Apache代理的Node.js路由

Node.js请求模块....在主体中发送JSON以使用api请求进行API请求

在node.js中使用请求模块时,POST请求状态代码(500)。Postman中的POST请求工作正常

Axios Get 请求返回 [代理代理] - Flask & Vue.js

node.js:找不到模块“请求”

node.js 通过请求模块发送

Node.js 的代理请求:net::ERR_EMPTY_RESPONSE

修改请求正文,然后在Node.js中进行代理

Node.js Express-代理请求后调用next()

Node JS TCP代理:使用Node JS设置HTTP隧道

如何使用Node JS Puppeteer在无头chrome请求中设置代理服务器

Node.js http模块未收到WS请求(使用https-proxy-agent)

Node.js:如何使用请求模块发送带有表单数据的标头?

无法使用Node.js中的请求模块传输大文件

我如何使用Node.js请求模块进行curl调用

如何使用Node.js中的请求模块发送带有删除请求的表单数据和标题

有关使用Node.js“代理”服务器代理CSS和JS的建议

从Node.js中的地址设置代理

IIS反向代理到node.js