我正在尝试制作一个简单的聊天应用。它在localhost:3000 / chat.html 上运行正常,但是当它部署在 OpenShift 上时,它会崩溃并出现以下错误:(在我rhc tail
之后日志)
编辑:我不再收到此错误
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EACCES
at errnoException (net.js:905:11)
at Server._listen2 (net.js:1024:19)
at listen (net.js:1065:10)
at net.js:1147:9
at dns.js:72:18
at process._tickCallback (node.js:442:13)
at Function.Module.runMain (module.js:499:11)
at startup (node.js:119:16)
at node.js:929:3
DEBUG: Program node server.js exited with code 8
DEBUG: Starting child process with 'node server.js'
我已经阅读了有关此错误的类似帖子,但这并没有解决我的问题。 1)我在高port (3000)
时具有约束力
2)我的地址未被使用(否则,我将获得EADDRRINUSE
)3)我在 OpenShift 上有另一个正在收听port 3000
的应用程序,但我认为他们不应该#39; t彼此影响,因为域不同
这是我的package.json:
{
"name": "chat",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"bcrypt-nodejs": "0.0.3",
"body-parser": "^1.15.1",
"cookie-parser": "^1.4.3",
"express": "^4.13.4",
"express-session": "^1.14.2",
"multer": "^1.1.0",
"sockjs": "^0.3.18"
}
}
这是我的server.js:
var express = require('express');
var app = express();
var session = require('express-session');
var http = require('http');
var sockjs = require('sockjs');
var connections = [];
var chat = sockjs.createServer();
chat.on('connection', function(conn) {
connections.push(conn);
var number = connections.length;
conn.write("Welcome, User " + number);
conn.on('data', function(message) {
for (var ii=0; ii < connections.length; ii++) {
connections[ii].write("User " + number + " says: " + message);
}
});
conn.on('close', function() {
for (var ii=0; ii < connections.length; ii++) {
connections[ii].write("User " + number + " has disconnected");
}
});
});
var server = http.createServer();
chat.installHandlers(server, {prefix:'/chat'});
server.listen(9999, '127.0.0.1');
app.use(express.static(__dirname + '/public'));
var ipaddress = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
var port = process.env.OPENSHIFT_NODEJS_PORT || 3000;
app.listen(port, ipaddress, function () {
console.log( "Listening on " + ipaddress + ", port " + port )
});
我在<{1}}的这一部分固定错误,如果我发表评论,聊天显然不起作用,但我可以在 OpenShift上部署它。我是否在 OpenShift 上创建了server.js
或socket
服务器错误?
HTTP
修改
而不是:
var connections = [];
var chat = sockjs.createServer();
chat.on('connection', function(conn) {
connections.push(conn);
var number = connections.length;
conn.write("Welcome, User " + number);
conn.on('data', function(message) {
for (var ii=0; ii < connections.length; ii++) {
connections[ii].write("User " + number + " says: " + message);
}
});
conn.on('close', function() {
for (var ii=0; ii < connections.length; ii++) {
connections[ii].write("User " + number + " has disconnected");
}
});
});
var server = http.createServer();
chat.installHandlers(server, {prefix:'/chat'});
server.listen(9999, '127.0.0.1');
试过这个并且也没有在 OpenShift 上工作,也适用于 localhost:3000 / chat.html
var server = http.createServer();
chat.installHandlers(server, {prefix:'/chat'});
server.listen(9999, '127.0.0.1');
修改
我把这条线一直放在顶部
app.set('port', 9999);
var server = http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
chat.installHandlers(server, {prefix:'/chat'});
而不是:
var ipaddress = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
我有:
var server = http.createServer();
chat.installHandlers(server, {prefix:'/chat'});
server.listen(9999, '127.0.0.1');
现在,它不再崩溃,但http服务器没有监听。
调查信息:
1)localhost:
var server = http.createServer(app).listen(app.get('port'), ipaddress, function(){
console.log('Express server listening on port ' + app.get('port') + ', ip: ' + ipaddress);
});
chat.installHandlers(server, {prefix:'/chat'});
OpenShit:
Http server listening on port 9999, ip: 127.0.0.1
Express server listening on 127.0.0.1, port 3000
2)刚刚发现,当我在本地运行应用程序时,我的Http server listening on port 9999, ip: 127.5.69.129
Express server listening on 127.5.69.129, port 8080
和 OpenShift 都在我的机器上本地工作。如果我使用手机连接相同的 OpenShift 链接,则localhost
服务器没有收听,因此我无法聊天。
答案 0 :(得分:0)
基于上面的信息,我们刚刚进行了简短的freenode聊天以及我们看过的两个文件:
您生成的html代码包含一个尝试连接到localhost:9999的javascript函数 - 这就是为什么没有运行本地服务器,客户端将无法连接。
我不是nodejs专家,所以我不能从nodejs的角度评论根本原因,但我建议看看如何正确配置从客户端创建的反向连接。