【发布时间】:2015-12-22 16:51:37
【问题描述】:
我最近在本地服务器上安装了 Node.js,当我创建一个“server.js”文件(使用 .createServer() 方法添加服务器)时,它可以正常加载。
但是安装Express.js后,默认文件如下:
/bin
/node_modules
/public
/routes
/views
app.js
package.json
遵循一些文档后,我被指示转到终端并输入以下命令:
node app.js
没有任何反应,命令行不到一秒刷新到下一行,访问正确的IP和端口后打开浏览器无济于事。
下面是 app.js 文件中的代码:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
我知道文件开头需要的实际“express”模块是神奇的地方,但是,当我运行命令行时:
node app.js
什么都没有发生。但是,如果我调用以下行:
npm start
一切似乎都很好。我想按原样关注文档,为什么 app.js 无法正常工作?
谢谢。
更新:我的问题与已经发布的另一个问题太相似了,所以我必须明确说明它们有何不同。在另一个问题中,有人在对默认的“app.js”文件运行 Supervisor 命令时质疑他们收到的代码号。
虽然本质上相似,但应该保留这个问题,因为那些对使用我的相同方法感到困惑的人将通过使用“node app.js”关注实际“app.js”文件的身份,而无需完全了解主管实用程序。
问候。
【问题讨论】:
-
你是从 app.js 所在的文件夹运行 node app.js 吗?
-
请参阅this answer 以获得解释。
-
@chriskelly ,是的,事实上我正在学习 Node.js 书中的教程。我已经为我的项目创建了几个服务器,并且使用“http-server”和“npm start”都没有问题,但是,这本书虔诚地使用了根文件夹中的“app.js”(就像我一样)并且似乎没有问题。如果可能的话,我想按照书中的说明进行操作。
-
@MatthewBakaitis 我希望我能给你答案,但不幸的是它只是一个评论的答案。谢谢一百万,这真的解释了很多。我对重新启动服务器没有任何问题,我相信我将来会使用 Supervisor。目前,我主要关心的是获得一个强有力的掌握。再次感谢。 (如果您想将您的回复复制并粘贴到我可以检查为已回答的实际评论中,我会立即着手处理)。
-
@chriskelly 老实说,我在理论上一点想法都没有,但作为一个已经创建了一些 server.js 文件的人,主要区别在于默认的 app.js 文件包含在默认的 Express 安装并不完全调用“createServer”表达式或侦听 IP 或端口。可能是因为它是一个基于模板的应用程序,我认为它只是引用了 './bin/www' 目录(这很遗憾,因为我想我可以启动 app.js 文件并立即打开服务器在浏览器中)。