2014-01-03 2 views
1

при запускене может подключиться к порту ошибка с узлом

node app.js 

Я получаю эту ошибку

info - socket.io started 
    warn - error raised: Error: listen EACCES 

Это весь код JavaScript в приложении.

Когда я бег

sudo supervisor app.js 

Он выводит

DEBUG: Starting child process with 'node app.js' 

но когда я посещаю Localhost: 8080, он говорит, что Google не может подключиться к локальному 8080. Я установил порт в client.js ниже (строка 3).

Вы видите, что я делаю неправильно?

app.js

var express = require('express'); 
var app = express(); 
var http = require('http'); 
var server = http.createServer(app); 
var jade = require('jade'); 

app.configure(function(){ 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 
    app.set('port', 80); 
    app.set('views', __dirname + '/views'); 
    app.engine('jade', require('jade').__express); 
}); 

var io = require('socket.io').listen(app.listen(app.get('port'))); 

app.get('/', function(req, res){ 
    res.render('layout.jade'); 
}); 

app.configure('development', function(){ 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

app.configure('production', function(){ 
    app.use(express.errorHandler()); 
}); 


var socketClient = require('socket.io-client'); 
var socket = socketClient.connect('https://chat.meatspac.es'); 

socket.on('message', function(data) { 
    io.sockets.emit('newmeat', { meat: data }); 
}); 

client.js

(function($) { 

    var socket = io.connect('http://localhost:8080'); 
    var template = $('#template').html(); 

    socket.on('newmeat', function (data) { 

    var copy = $(template).clone(); 
    var list = $('#meats'); 
    var images = $('img'); 

    if (images.length < 9) { 

     // search for empty images, fill them with new data 
     if ($('[data-empty]').length > 0) { 
     $('[data-empty]').first().attr('src', data.meat.chat.value.media).removeAttr('data-empty'); 
     return; 
     } 

     // otherwise fill the template in with data 
     copy.find('img').attr({ 
     'src' : data.meat.chat.value.media, 
     'height' : '150', 
     'width' : '200' 
     }); 

     // if the image is the 4th one appended (counting from zero), create the meatspace logo 
     if (images.length == 3) { 
     list.append(copy); 

     var template2 = $(template).clone(); 
     template2.find('img').addClass('logo').attr({ 
      'src' : '/meatspace.svg', 
      'height' : '150', 
      'width' : '200' 
     }); 
     template2.find('a').addClass('logolink'); 

     list.append(template2); 
     } else { 
     list.append(copy); 
     } 
    } 

    // else add new data to elements already present 
    else if ($('[data-empty]').length > 0) { 
     $('[data-empty]').first().attr('src', data.meat.chat.value.media).removeAttr('data-empty'); 
     return; 
    } 
    }); 

    // remove an unwanted gif 
    $('ul').on('click', 'a:not(:eq(4))', function(e) { 
    e.preventDefault(); 

    $(e.currentTarget).find('img').attr({'src' : '', 'data-empty' : ''}); 
    }); 

}(jQuery)); 
+3

Я думаю, вы должны пойти к порту 80, а не 8080. (Вы написали порт 80 в коде сервера.) – Licson

+0

Просто используйте порт 3000, поэтому вы не шагового на других используемых портах – tymeJV

+3

Попытка использовать порт 80 как non-root дает вам ошибку (если я правильно помню, что порты ниже 1024 ограничены корнем). – some

ответ

2

На многих машинах * NIX, вы не можете связаться с портом 80, если не поднять с Судо (который вы не хотите для запуска вашего кода как).

Одним из решений является запуск его на порт выше 1024, а затем использование обратного прокси-сервера, например node http-proxy или nginx, который прослушивает на 80 и вперед.

Это также имеет другие преимущества, такие как разрешение нескольких сайтов на 80 (по разным именам хостов) путем простой пересылки в различные приложения для узлов, работающих на разных портах.

У меня есть ссылки на этот пост: NodeJS Managed Hostings vs VPS

Смежные вопросы