在Mac OS X上没有为Node.js加载localhost:8080

时间:2016-01-14 17:40:02

标签: javascript node.js macos apache server

我正在关注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中的所有内容。

2 个答案:

答案 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)