【问题标题】:localhost:8080 is not loaded for Node.js on Mac OS Xlocalhost:8080 未在 Mac OS X 上为 Node.js 加载
【发布时间】:2016-04-20 04:04:08
【问题描述】:

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

【问题讨论】:

  • 尝试更改端口,如果它在新端口上工作...您可能没有杀死以前正在运行的进程。如果您重新启动机器,您应该能够在不更改端口的情况下使其工作。
  • 我尝试了一些不同的端口,但没有成功。
  • 它不起作用,但为什么?错误信息是什么?你看到了什么?
  • 无论如何,如果我没记错的话,在您的请求处理程序中,您需要有一个路由表,即根据请求的路由调用路由的处理程序...能否请您链接到您的教程正在看吗?
  • @nbro 我重新启动了计算机,但没有任何改变。我通过键入node http.js 启动节点,当我尝试输入 localhost:8080 时,它似乎正在尝试加载。我没有任何错误信息。当我使用 CTRL+C 杀死 node http.js 进程时,会立即看到“无法打开页面”。当我每次输入 localhost 时,我都会看到“它有效”的废话。

标签: javascript node.js macos apache server


【解决方案1】:
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);

【讨论】:

  • 可能是什么问题?
  • 你试过我提供的示例http服务器代码了吗?
  • 是的,它确实有效,但我的代码有什么问题?区别在于constrequest.on 方法。
  • 我已经改变了你所说的 end 方法,但没有删除 writeHead 方法。有效。在那种情况下,我会把我一直在关注的教程扔到鞭挞?
【解决方案2】:

尝试response.send() 而不是response.end()

您没有将信息发送回客户端。

见:http://expressjs.com/en/api.html

编辑

评论是正确的,对不起。阅读速度太快。

见:https://nodejs.org/api/http.html#http_http_createserver_requestlistener

你需要一个路由来接收。使用http.get('/', someFn)

【讨论】:

  • 谢谢,但不,它不能解决。我应该安装 Express 吗?
  • 错了。这不是快递,而是普通的原始节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多