Node.js 在nodejs中侦听http服务器时发生Express模块错误
我已经创建了一个nodejshttp服务器Node.js 在nodejs中侦听http服务器时发生Express模块错误,node.js,express,Node.js,Express,我已经创建了一个nodejshttp服务器 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)
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)
f:\Labs\nodejs\webapp>node index.js
服务器已启动
在8888端口上侦听Express应用程序
events.js:66
抛出参数[1];//未处理的“错误”事件
^
错误:请使用侦听器
在errnoException(net.js:769:11)
在服务器上。\u listen2(net.js:909:14)
听(net.js:936:10)
在Server.listen(net.js:985:5)
在Function.app.listen(f:\Labs\nodejs\webapp\node\u modules\express\lib\appli
(见附件js:532:24)
在Object.start(f:\Labs\nodejs\webapp\server.js:15:6)
反对。(f:\Labs\nodejs\webapp\index.js:11:8)
在模块处编译(Module.js:449:26)
在Object.Module._extensions..js(Module.js:467:10)
在Module.load(Module.js:356:32)
当我更改app.listen的端口时,它不会抛出此错误,该怎么办
更改服务器端口以外的端口是否会将服务器会话保留在另一个端口
我如何在其他js页面中访问此应用程序变量以获取/设置数据?您不能让多个东西像这样监听同一端口,因此出现
EADDRINUSE
错误。如果要在使用Express时创建自己的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);
app.get('/foo/:fooId', function(req, res, next) {
// get foo and then render a template
res.render('foo.html', foo);
});
从Express docs:
express()返回的应用程序实际上是一个JavaScript函数,
设计用于作为回调传递到节点的http服务器以处理
请求
或者你也可以这样做
app.listen(8888);
然后Express将为您设置一个
http
服务器
然后,您将在Express中设置路由,以实际处理传入的请求。使用Express时,路线如下所示:
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);
app.get('/foo/:fooId', function(req, res, next) {
// get foo and then render a template
res.render('foo.html', foo);
});
如果你想在其他模块(通常用于测试)中访问你的应用程序
,你可以像导出任何其他变量一样导出它:
module.exports.app = app;
然后,您将能够在其他模块中
要求('./app')。app
。您不能让多个东西在同一端口上侦听,因此出现EADDRINUSE
错误。如果要在使用Express时创建自己的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);
app.get('/foo/:fooId', function(req, res, next) {
// get foo and then render a template
res.render('foo.html', foo);
});
从Express docs:
express()返回的应用程序实际上是一个JavaScript函数,
设计用于作为回调传递到节点的http服务器以处理
请求
或者你也可以这样做
app.listen(8888);
然后Express将为您设置一个
http
服务器
然后,您将在Express中设置路由,以实际处理传入的请求。使用Express时,路线如下所示:
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);
app.get('/foo/:fooId', function(req, res, next) {
// get foo and then render a template
res.render('foo.html', foo);
});
如果你想在其他模块(通常用于测试)中访问你的应用程序
,你可以像导出任何其他变量一样导出它:
module.exports.app = app;
然后,您将能够
在其他模块中要求('./app')。app
。如果您打算在同一端口上运行,您可以查看当前是否使用运行节点进程
ps aux| grep节点
然后,
kill-9ProcessId
如果您打算在同一端口上运行,您可以查看当前是否使用运行节点进程
ps aux| grep节点
然后
kill-9processid
,然后Express将为您设置一个http服务器。这条线路实际上解决了我的问题,我不知道express为它创建了另一个服务器。所以实际上问题是,我无意中在同一个端口上创建了两个服务器,这导致了异常。谢谢是的,我不确定您是否真的需要设置自己的http服务器实例(如果您要处理http和https连接,这很有用)。如果您不需要,只需使用app。听一听
-更简单:),Express就会为您设置一个http服务器。这条线路实际上解决了我的问题,我不知道express为它创建了另一个服务器。所以实际上问题是,我无意中在同一个端口上创建了两个服务器,这导致了异常。谢谢是的,我不确定您是否真的需要设置自己的http服务器实例(如果您要处理http和https连接,这很有用)。如果您不需要,只需使用应用程序即可。听一听
-更简单:)