在nodejs中侦听http服务器时出现Express模块​​错误

我已经创build了一个nodejs http服务器

var http = require("http"); var url = require("url"); var express = require('express'); var app = express(); function start(route, handle){ function onRequest(request,response){ var pathname = url.parse(request.url).pathname; console.log("Request for " + pathname + " received."); route(handle, pathname, response, request); } http.createServer(onRequest).listen(8888); console.log("Server has started"); app.listen(8888); console.log('Express app listening on port 8888'); } 

它给错误

 f:\Labs\nodejs\webapp>node index.js Server has started Express app listening on port 8888 events.js:66 throw arguments[1]; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js:769:11) at Server._listen2 (net.js:909:14) at listen (net.js:936:10) at Server.listen (net.js:985:5) at Function.app.listen (f:\Labs\nodejs\webapp\node_modules\express\lib\appli cation.js:532:24) at Object.start (f:\Labs\nodejs\webapp\server.js:15:6) at Object.<anonymous> (f:\Labs\nodejs\webapp\index.js:11:8) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) at Module.load (module.js:356:32) 

当我改变app.listen端口不要抛出这个错误,可以做什么?

将更改服务器端口以外的其他端口将服务器的会话保持在另一个端口?

我怎样才能访问这个应用程序variables在其他js页面来获取/设置数据?

你不能像这样在同一个端口上监听多个东西,所以EADDRINUSE错误。 如果您想在使用Express时创build自己的http服务器,可以这样做:

 var express = require('express'); var https = require('https'); var http = require('http'); var app = express(); http.createServer(app).listen(8888); https.createServer(options, app).listen(443); 

从快速文档:

express()返回的应用程序实际上是一个JavaScript函数,它被devise成作为callback函数传递给节点的http服务器来处理请求。

或者你可以做

 app.listen(8888); 

然后Express将为您设置一个http服务器。

然后,您将使用Express在Express中设置路线,以便实际处理请求。使用Express,路线如下所示:

 app.get('/foo/:fooId', function(req, res, next) { // get foo and then render a template res.render('foo.html', foo); }); 

如果你想在其他模块中访问你的app (通常用于testing),你可以像任何其他variables一样导出它:

 module.exports.app = app; 

然后,您可以在其他模块中require('./app').app

如果你打算在同一个端口上运行,你可以看到你是否正在运行节点进程

ps aux | grep node

然后kill -9 PROCESSID