2015-11-16 42 views
0

我遇到了一些奇怪的事情。可能是因爲我是Express和Node的新手。我的Express 4.13.1應用程序監聽2個不同的端口

我用快遞4.13.1默認情況下它在端口運行3000

然而,當我加入這行我app.js:

app.listen(8080);

該應用程序啓動聽這兩個端口3000和8080 控制檯輸出爲:

/usr/local/bin/node --debug-brk=62380 --nolazy bin/www 
Debugger listening on port 62380 
Mon, 16 Nov 2015 13:59:13 GMT chatDel:server Listening on port 3000 

但要清楚,在兩個端口請求作出迴應編輯。

我錯過了什麼?

這裏是我的app.js

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var mongoose = require('mongoose'); 
var fs = require('fs'); 
var autoIncrement = require('mongoose-auto-increment'); 
var config = require('./config/serverConfig'); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 
var inmsg = require('./routes/inmsg'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/users', users); 
app.use('/inmsg', inmsg); 
app.listen(8080); 


var connection =    mongoose.createConnection(config.mongoose.connectionString); 
global.db = connection; 
autoIncrement.initialize(connection); 

//load all files in model dir 
fs.readdirSync(__dirname + '/models').forEach(function(filename){ 
    if(~filename.indexOf('.js')) require(__dirname + '/models/' + filename); 
}); 


// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: err 
    }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 

module.exports = app; 

這裏是我的Package.jason:

{ 
    "name": "chatDel", 
    "version": "0.0.0", 
    "private": true, 
    "scripts": { 
    "start": "node ./bin/www" 
    }, 
    "dependencies": { 
"body-parser": "~1.13.2", 
"cookie-parser": "~1.3.5", 
"debug": "~2.2.0", 
"express": "~4.13.1", 
"indicative": "^1.3.1", 
"jade": "~1.11.0", 
"mongodb": "~3.0.7", 
"mongoose": "^4.2.4", 
"mongoose-auto-increment": "^5.0.1", 
"morgan": "~1.6.1", 
"serve-favicon": "~2.3.0", 
"stately.js": "^1.3.0" 
    } 
} 

編輯: 我花了一些更大的動作:

  1. 我重新啓動我的電腦
  2. 我確保沒有「節點」進程存在
  3. 我開始從我的IDE再次調試
  4. 同樣,兩個端口都可用(8080和3000),並且只有1個「節點」進程在進程列表中可見我的電腦。(我使用的是macbook專業版)

當我更改聽該端口的行爲:app.listen(3000)我在控制檯中調試時出現以下錯誤:(再次,只有1個節點進程可見,然後在大約10秒後退出該錯誤。)

/usr/local/bin/node - -debug-BRK = 49558 --nolazy倉/萬維網 調試器監聽端口49558 端口3000已在使用

EDIT 2的方法,退出代碼完成: 這是我的www文件位於/ bin/www下,它沒有擴展名,雖然它是一個js文件,並且它是作爲安裝的一部分生成的。

#!/usr/bin/env node 

/** 
* Module dependencies. 
*/ 

var app = require('../app'); 
var debug = require('debug')('chatDel:server'); 
var http = require('http'); 

/** 
* Get port from environment and store in Express. 
*/ 

var port = normalizePort(process.env.PORT || '3000'); 
app.set('port', port); 

/** 
* Create HTTP server. 
*/ 

var server = http.createServer(app); 

/** 
* Listen on provided port, on all network interfaces. 
*/ 

server.listen(port); 
server.on('error', onError); 
server.on('listening', onListening); 

/** 
* Normalize a port into a number, string, or false. 
*/ 

function normalizePort(val) { 
    var port = parseInt(val, 10); 

    if (isNaN(port)) { 
    // named pipe 
    return val; 
    } 

    if (port >= 0) { 
    // port number 
    return port; 
    } 

    return false; 
} 

/** 
* Event listener for HTTP server "error" event. 
*/ 

function onError(error) { 
    if (error.syscall !== 'listen') { 
    throw error; 
    } 

    var bind = typeof port === 'string' 
    ? 'Pipe ' + port 
    : 'Port ' + port; 

    // handle specific listen errors with friendly messages 
    switch (error.code) { 
    case 'EACCES': 
     console.error(bind + ' requires elevated privileges'); 
     process.exit(1); 
     break; 
    case 'EADDRINUSE': 
     console.error(bind + ' is already in use'); 
     process.exit(1); 
     break; 
    default: 
     throw error; 
    } 
} 

/** 
* Event listener for HTTP server "listening" event. 
*/ 

function onListening() { 
    var addr = server.address(); 
    var bind = typeof addr === 'string' 
    ? 'pipe ' + addr 
    : 'port ' + addr.port; 
    debug('Listening on ' + bind); 
} 
+0

因此,調試器正在監聽62380,並且Web服務器本身在3000上。有什麼問題? 8080端口此時不應答。向我們顯示服務器代碼,以便我們檢查。 – Andrius

+0

在將代碼更改爲端口8080之前,您是否確保沒有運行較早的實例? –

+0

是的,我有,當我停止服務器沒有任何監聽,當我在調試模式下啓動它時,兩個端口都可用。我現在要添加一些服務器代碼。 – TBE

回答

1

正如在評論線程中所述 - 請檢查您的/ bin/www而不是app.js. :)

+0

你可以請在www文件上多塗一些燈嗎?任何類型的信息都可以做到。另外,從我的錯誤,我們已經學會了如何使一個應用程序監聽2個不同的端口:)所以,它在服務器性能方面有什麼好處? (請添加到您的答案,而不是在評論中) – TBE

相關問題