events.js:72 throw er; //未处理的错误' event ^ Error:在OpenShift上侦听EACCES

时间:2016-12-29 06:35:02

标签: javascript node.js express deployment openshift

我正在尝试制作一个简单的聊天应用。它在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.jssocket服务器错误?

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服务器没有收听,因此我无法聊天。

1 个答案:

答案 0 :(得分:0)

基于上面的信息,我们刚刚进行了简短的freenode聊天以及我们看过的两个文件:

您生成的html代码包含一个尝试连接到localhost:9999的javascript函数 - 这就是为什么没有运行本地服务器,客户端将无法连接。

我不是nodejs专家,所以我不能从nodejs的角度评论根本原因,但我建议看看如何正确配置从客户端创建的反向连接。