express.js没有回应https帖子

时间:2015-09-16 10:55:19

标签: javascript node.js ssl express

我尝试提供HTTPS并听取POST请求,但它没有响应请求。

我使用节点0.12.6并表达4.13.3

我认为路由应该设置不同,但我不确定如何...

var fs = require('fs');
var express = require('express');
var app = express();
var https = require('https');

var privateKey  = fs.readFileSync('my_key.key', 'utf8');
var certificate = fs.readFileSync('my_cert.crt', 'utf8');

https.createServer({key: privateKey, cert: certificate}).listen(3000);
app.post('/process', function(req, res) {
  res.send('processing...');
});

3 个答案:

答案 0 :(得分:1)

你应该听app,而不是https。

如果您使用expressjs

,甚至不需要

https

{{1}}

答案 1 :(得分:0)

您的凭据后,您没有将快速app作为选项传递给您的https服务器。所以当这个服务器被帖子命中时,它不知道使用快速路由来响应。以下代码块来自This问题,与我实施https的方式相同,并且非常易于阅读/遵循。

var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey  = fs.readFileSync('sslcert/server.key', 'utf8');
var certificate = fs.readFileSync('sslcert/server.crt', 'utf8');

var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();

// your express configuration here

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

httpServer.listen(80);
httpsServer.listen(443);

请注意app作为https.createServer(credentials, app);中的第二个选项传递如果您愿意,可以取消httpServer,但这样做也可以让您以任何您想要的方式处理http请求。如果用户在其地址中使用http而不是https,这将非常有用。然后,您可以使用http服务器将它们重定向到安全的https路由。

如果您仍然遇到CORS问题,请尝试添加

app.all('*', function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "X-Requested-With"); 
    res.header("Access-Control-Allow-Headers", "Content-Type"); 
    res.header("Access-Control-Allow-Methods", "DELETE, PUT, POST"); 
    next(); 
}); 

到您的快速配置。这将允许跨域请求到您的服务器

答案 2 :(得分:0)

全心全意,

问题实际上是在客户端上。 在对 localhost 执行xmlhttprequest时,我得到“连接被拒绝”。 虽然它是同一台服务器,当我使用服务器名称时,问题解决了。

对于CORS,我使用了CORS npm和

app.use(cors());