Node.js + Express - 无法连接。ERR_CONNECTION_REFUSED

7

我按照这个基本例子进行了操作:

http://shapeshed.com/creating-a-basic-site-with-node-and-express/

文件都已经生成了...都在那里。我逐步运行了它们。无论我使用哪个浏览器,都会显示“无法连接”(Firefox)和“This webpage is not available ... ERR_CONNECTION_REFUSED”(Chrome) - 它就是不工作。我检查了生成的bin/www文件,似乎指定了端口3000. 然而,在生成站点后,当我运行“node app.js”时,我没有任何输出。在查看该文件时,我注意到它指向我的系统上的错误路径,因此我更改为正确的路径:

#!/usr/local/bin/ node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('rwc:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = parseInt(process.env.PORT, 10) || 3000;
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error('Port ' + port + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error('Port ' + port + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  debug('Listening on port ' + server.address().port);
}

没有进展。"node app.js"运行后没有输出,也无法打开它。我知道Node已经安装正确,因为我已经运行过一堆示例代码并且稍微尝试了一下。
我的OS X版本是Yosemite,但我的防火墙已关闭。
发生了什么事?在搜索时惊人地找不到太多有用信息,这让我不敢在Node上构建任何重要的东西。

1
我不会犹豫。90%的计算机错误是用户错误。Node不是问题所在。当你运行node app.js时,完全没有输出吗?另外,请更新问题并附上运行which node时收到的输出。 - Seth
2
你正在访问哪个URL?请提供创建服务器的代码,这将非常有帮助。 - surajck
1
这个进程还在运行吗?你是从命令行中运行它的吗,以便能够看到它仍在运行。 - Ted Johnson
2
所以,为了澄清一下,已经安装了node、express和express-generator。运行了express...,它生成了一个目录。你进入该目录并运行了npm i(安装)。一旦所有依赖项都安装完毕,你运行了node app.js,但没有输出?你能粘贴命令及其返回的内容吗?我们目前在企业级应用程序中使用node.js,并取得了巨大成功。你只需要将它用于正确的事情上,而不是将它用于它不适合的事情上。 - Seth
1
老实说,仔细阅读文档并学习Web应用程序架构。如果它是经过实战测试的结构,则架构始终是最新的。文档也始终是最新的,并提供您需要了解的所有内容。除此之外,只需熟悉JavaScript作为一种语言和CommonJS。始终使用最新和最稳定的模块。MVC模式似乎是您想要的,而Express 4对此非常稳定。加强您的CommonJS知识,您将拥有一个非常强大的模块化应用程序。如果我有时间,我会在GitHub上为您提供参考。 - Seth
显示剩余11条评论
2个回答

11

你的问题在于,你所遵循的教程非常古老。Express 生成器随着时间的推移已经极大地改变了其结构。现在它使用 npm 来运行初始应用程序命令,你应该这样做。在 package.json 的 scripts 对象中抽象命令非常方便。

只需进入示例应用并运行以下命令:

npm start

你会在终端看到以下内容:

$ npm start

> example@0.0.0 start /Users/your-user/example
> node ./bin/www

并享受!

除了设置之外,该教程的其余部分仍然相当准确。老实说,我会首先参考文档。这只是我的意见。

最后,“我注意到它在我的系统上指向了错误的Node路径,所以我将其更改为正确的路径”。您应该将其改回来,否则可能会失败。


2

如果想要保持服务器运行,则使用nodemon。

nodemon bin/www

这将产生相同的输出:
[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node ./bin/www bin/wwww`

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接