2015-05-28 71 views
3

我正在使用node.js的请求模块,并且时间一到我得到未捕获错误(仅在生产时,可能在node.js更新后)Nodejs错误:不支持协议“http:”。预期的“https:”

节点版本:0.12.4,请求版本:2.55.0

1000-2000请求可以成功地执行,但后来我得到这样的错误:

Error: Protocol "http:" not supported. Expected "https:". 
    at new ClientRequest (_http_client.js:75:11) 
    at Object.exports.request (http.js:49:10) 
    at Request.start (/path/node_modules/request/request.js:963:30) 
    at Request.end (/path/node_modules/request/request.js:1531:10) 
    at end (/path/node_modules/request/request.js:734:14) 
    at Immediate._onImmediate (/path/node_modules/request/request.js:748:7) 
    at processImmediate [as _immediateCallback] (timers.js:358:17)" 

我怎样才能解决这个问题?为什么会出现? 谢谢)

回答

1

这是由使用SSL运行您的应用程序,但通过正常的HTTP调用它造成的。您需要进行检查以确定客户端是使用HTTP还是HTTPS,然后修改代码以适应。

像这样的东西应该工作:

var express = require('express') 
    , http = require('http') 
    , https = require('https') 
    , app = express(); 

http.createServer(app); 
https.createServer({ ... }, app); 

然后,当你处理你的请求,这样做

app.get('/your-route', function(req, res) { 
    if (req.secure) { 
     var req = https.get(url, function(res) { ... }); 
    } else { 
     var req = http.get(url, function(res) { ... }); 
    } 
}); 

req.secure识别是否连接牢固。注意我们如何根据连接类型使用httpshttp

相关问题