我试图用https运行我的节点服务器。我正在使用express和socket.io。
这是我的https代码:
var httpsPort = 443;
var privateKey = fs.readFileSync(mykeypath');
var certificate = fs.readFileSync(mycertificatepath');
var credentials = {key: privateKey, cert: certificate};
var https = require('https').Server(credentials,app);
var io = require('socket.io')(https);
https.listen(httpsPort, function(){
logger.info('listening on *:' + httpsPort);
});
app.get('/initGame', function (req,res){
var slots = require('./slots.json', 'utf8');
var userObject = {
address : req.connection.remoteAddress,
userAgent : req.headers['user-agent']
};
db.getPlayedGames(userObject,function(playedGames){
logger.debug(playedGames);
if(typeof playedGames == 'undefined' ){
playedGames=0;
}else{
playedGames = playedGames.games_played;
}
var spinsLeft = 10-playedGames;
res.json({
spinsLeft: spinsLeft,
slots: slots
});
});
});
在我的客户上,其以下内容:
var myServer = "//" + document.domain + ":443";
$.get( myServer + "/initGame", function(data) {
totalSpinsLeft = data.spinsLeft;
$('#trysLeft').text(totalSpinsLeft);
Seven.init(data.slots);
}).fail(function(){
setTimeout(function(){
$('#spinner2').text('Fehler bitte neu laden!');
},3000);
});
现在我在服务器上收到以下异常:
uncaughtException:缺少PFX或证书+私钥。
编辑:现在我越来越
错误的请求
您的浏览器发送了该服务器无法理解的请求。原因:您正在对启用SSL的服务器端口使用纯HTTP。请改用HTTPS方案访问此URL。
没有密钥和证书文件就很难测试您的示例,相反,我将提供一个使用Express,socket.io和https的示例。
首先,我将创建密钥和证书文件,因此在目录中,从终端运行以下命令:
它下面的命令将生成一个包含RSA密钥的文件。
$ openssl genrsa 1024 > file.pem
在这里,将要求您输入数据,但是可以按Enter保留空白,直到生成crs.pem。
$ openssl req -new -key file.pem -out csr.pem
然后将创建一个包含SSL证书的file.crt文件。
$ openssl x509 -req -days 365 -in csr.pem -signkey file.pem -out file.crt
因此,app.js
在我要设置和启动服务器的文件中file.pem
,请注意我正在使用文件并file.crt
在最后一步中生成:
var fs = require('fs');
var https = require('https');
var express = require('express');
var app = express();
var options = {
key: fs.readFileSync('./file.pem'),
cert: fs.readFileSync('./file.crt')
};
var serverPort = 443;
var server = https.createServer(options, app);
var io = require('socket.io')(server);
app.get('/', function(req, res) {
res.sendFile(__dirname + '/public/index.html');
});
io.on('connection', function(socket) {
console.log('new connection');
socket.emit('message', 'This is a message from the dark side.');
});
server.listen(serverPort, function() {
console.log('server up and running at %s port', serverPort);
});
然后是我public/index.html
使用服务器的位置:
<!doctype html>
<html>
<head>
</head>
<body>
<h1>I am alive!!</h1>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.5/socket.io.js"></script>
<script>
var URL_SERVER = 'https://localhost:443';
var socket = io.connect(URL_SERVER);
socket.on('message', function(data) {
alert(data);
});
</script>
</body>
</html>
最后,如果您从浏览器访问https://localhost
,则将看到警报,其中包含来自websocket服务器的消息。
我将express与socket.io一起使用,将express-session与Express-socket.io-session一起使用,这有助于将会话连接到我的套接字实例。 Deploy函数运行诸如会话、路由等内容。 POST http://localhost:8080/socket.io/?eio=3&transport=polling&t=lz9ey8p 404(未找到)
问题内容: 我有一个反向代理背后的应用程序,我希望它仅侦听localhost / 127.0.0.1.。 我希望这可以工作: 要么 …但是我得到一个错误: 在不指定主机名的情况下运行应用程序可以正常工作,即。 我正在运行Node v0.6.14 和express @ 2.5.5 ,并阅读了此Google 网上论坛的 讨论, 并在Express application.js中找到此注释,并说:“此方
问题内容: 我正在尝试使用我的SSL证书运行socket.io,但是它将无法连接。 我基于聊天示例创建代码: 如果我删除SSL代码,它运行正常,但是与此同时,我收到了一个请求,请求http://domain.com/socket.io/1/?t=1309967919512 请注意,它没有尝试使用https,这会导致它失败。 我正在测试chrome,因为它是该应用程序的目标浏览器。 抱歉,这是一个简
问题内容: 我想在Windows Azure网站上运行,我想通过默认的* .azurewebsites.net证书使用ssl。它无需执行任何操作即可工作,但是http也可用于每个目的地,而不仅仅是https。如何强制从http重定向到https?通常我可以做类似的事情: 但由于我对* .azurewebsites.net证书一无所知,例如其路径,因此无法正常工作。 如何将全部或部分请求重定向到ht
问题内容: 我有一个使用socket.io和express的简单node.js应用程序。目前所有的javascript都在HTML文件中,但我想尝试将其分离为.js文件。 在我的主节点应用程序中,我有以下内容: 直到我将javascript从index.html移到.js文件,然后尝试从我的HTML文件中引用它,如下所示: 我认为express无法提供静态文件,因此我尝试了以下方法: 谁能告诉我我
我有一个带有Express和Socket.io的Node.js服务器。在socket.io文档中,我找到了主机服务器的示例代码。 我现在的问题是:我无法从请求中读取Post数据。 我如何从请求中读出正文?我希望有人能帮助我!谢谢