我正在关注Node.js的教程,我有以下代码:
var http = require("http");
http.createServer(function (request, response){
request.on("end", function() {
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end('Hello HTTP!');
});
}).listen(8080);
我已将该代码保存为http.js.当我尝试检查localhost时:8080没有任何反应,只有等待。但是,当我尝试进入localhost时,我看到虚拟“它有效!”信息。可能还有一些东西在我的电脑里运行。我怎么能摆脱它?我试过停止apache并删除/ Library / WebServer / Documents中的所有内容。
答案 0 :(得分:2)
const http = require('http');
http.createServer( function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8080);
这是nodeJS中的一个简单的http服务器。
“它有效!”是成功安装/运行Apache http服务器的默认index.html,默认情况下运行在端口80上。您的nodejs服务器正在侦听端口8080,因此没有问题,两者都可以共存。
如果你还想停止apache服务器的话,任何机会
sudo service apache2 stop
可以使用。
如果端口8080上有任何服务器正在运行,然后您尝试在端口8080上启动您的http服务器,您将收到Error: listen EADDRINUSE
如果,您的服务器启动没有此错误,您可以确定,没有其他任何东西在端口8080上运行
编辑:
当客户端(浏览器)的请求结束时,将触发request.on(end)
。但在您的情况下,浏览器仍在等待您的响应,并且请求正在等待处理。只要您立即致电response.end()
,我们就会触发request.on(end)
。
现在我将修改你的代码,以这种方式工作,只需要很小的修改
var http = require("http");
http.createServer(function (request, response){
response.end('Hello HTTP!'); //change
request.on("end", function() {
//should be outside or removed
/*response.writeHead(200, {
'Content-Type': 'text/plain'
});*/
});
}).listen(8080);
答案 1 :(得分:-1)
尝试使用response.send()
代替response.end()
。
您不会将信息发回给客户。
请参阅:http://expressjs.com/en/api.html
修改强>
评论是对的,抱歉。读得太快了。
请参阅:https://nodejs.org/api/http.html#http_http_createserver_requestlistener
您需要一条接收路线。使用http.get('/', someFn)