无论如何设置passportjs的代理设置?

目前,我正在使用基于expressjs和使用passportjs( http://passportjs.org/ )进行yammer身份validation的sails框架。

在公司代理后面的服务器上部署节点应用程序时遇到问题。 无法连接到yammer进行OAuth2身份validation。

错误如下:

错误:无法获取访问令牌(错误:连接ETIMEDOUT)
     at /root/rlps/node_modules/passport-yammer/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:125:38
    在/root/rlps/node_modules/passport-yammer/lib/passport-yammer/strategy.js:72:20
    在ClientRequest。  (/root/rlps/node_modules/passport-yammer/node_modules/passport-oauth/node_modules/oauth/lib/oauth2.js:129:5)
    在ClientRequest.EventEmitter.emit(events.js:95:17)
    在CleartextStream.socketErrorListener(http.js:1547:9)
    在CleartextStream.EventEmitter.emit(events.js:95:17)
    在Socket.onerror(tls.js:1437:17)
    在Socket.EventEmitter.emit(events.js:117:20)
    在net.js:441:14
    在process._tickDomainCallback(node.js:459:13)

我相信这是因为代理阻塞了路。 我试图设置一切环境值(如http_proxy和https_proxy),但似乎代码不承认他们,需要在passportjs中的某处configuration它。

那么,在passportjs中设置代理设置或在nodejs中解决这个代理问题的任何好方法?

Node.js默认不使用http_proxyhttps_proxyvariables。

您必须调整请求的agent参数,但由于您无法控制该库,因此可以像这样全局更改:

 npm i tunnel --save 

创build一个setup_proxy.js:

 var env = process.env; if (!env['http_proxy']) return; var localUrls = [ 'http://some-internal-url.mycompany.local', ]; var url = require('url'); var tunnel = require('tunnel'); var proxy = url.parse(env['http_proxy']); var tunnelingAgent = tunnel.httpsOverHttp({ proxy: { host: proxy.hostname, port: proxy.port } }); var https = require('https'); var http = require('http'); var oldhttpsreq = https.request; https.request = function (options, callback) { if (localUrls.some(function (u) { return ~u.indexOf(options.host); })){ return oldhttpsreq.apply(https, arguments); } options.agent = tunnelingAgent; return oldhttpsreq.call(null, options, callback); }; var oldhttpreq = http.request; http.request = function (options, callback) { if (localUrls.some(function (u) { return ~u.indexOf(options.host); })){ return oldhttpreq.apply(http, arguments); } options.agent = tunnelingAgent; return oldhttpreq.call(null, options, callback); }; 

在开始时require('./setup_proxy')

请注意,这对http和httpsstream量使用相同的http_proxy envvariables,但是如果需要更改,代码很容易遵循。