【问题标题】:Supervisor node .js "Program node app exited with code 0" error主管节点 .js“程序节点应用程序以代码 0 退出”错误
【发布时间】:2014-08-08 22:35:18
【问题描述】:

当我安装一个快速脚手架应用程序时

express

然后运行 ​​npm 安装

npm install

然后运行主管

supervisor app

我明白了

Starting child process with 'node app'
Program node app exited with code 0

app.js 文件是一个基本的默认 express 实例。

var express = require('express');
var path = require('path');
var favicon = require('static-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');

app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
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;

【问题讨论】:

  • code 0 不是错误。它表示程序成功完成或process.exit() 被调用而没有参数。您需要发布app.js 的代码以获得更多帮助。这还不足以做更多的事情。
  • 你可能只需要运行supervisor app.js,看起来你可能忘记了文件分机?
  • @Matt Bakaitis 我添加了 app.js 文件。它只不过是一个基本的 Express.js 实例。
  • 里面没有app.listen。服务器从不实际提供服务。
  • 末尾的module.exports 表明这是由其他东西调用的。这是框架的一部分还是教程的一部分?我在其他 StackOverflow 问题上找到了其他相同的代码,但我找不到原始来源。

标签: node.js express node-supervisor


【解决方案1】:

生成器创建的应用调用./bin/www,其中包括app.js,然后开始监听流量。

app.js 自己不这样做

我认为理解这一点很重要。

app.listen 不是app.js 中被调用,而是在./bin/www 中被调用...这就是你得到exit 0 结果的原因。当您调用 app.js 而不是 ./bin/www 时,它会运行文件,但由于没有命令监听流量,程序正常结束......即什么都没做。

也就是说,你有两个选择..

选项 1

如果您有一个./bin/www 文件,您可以运行supervisor ./bin/www 来开始工作。

选项 2

如果由于某种原因您没有./bin/www 文件,您可以编辑您的应用程序文件使其看起来像这样。

在您的应用列表中,替换

module.exports = app;

有了这个

app.set('port', process.env.PORT || 3000);

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});

重要提示

虽然该编辑将启动应用程序侦听并且您不会再收到exit 0,但我不能保证如果其他文件和目录丢失,应用程序不会因其他错误而崩溃。例如,如果routes 目录不存在,则需要routes/indexroutes/users 的声明将失败,并且会发生其他不好的事情。

【讨论】:

  • 我使用的是以前版本的 node/express,今晚刚刚更新,我不习惯新的命令结构。我没有使用 npm start 因为它不会在您编写代码时更新,这就是我尝试使用主管的原因。使用命令“启动主管应用程序”适用于我制作的旧应用程序,但不适用于本文中的代码。
  • 更新了我的答案。如果您不清楚为什么 supervisor app 会返回 exit 0 或者为什么调用 supervisor ./bin/www 是一种替代方法,请查看一些 express.js 教程并访问项目 github 页面。 github 页面有许多很好的示例项目,在开始时非常有用。
  • 为什么点击www文件运行节点?
  • 单击文件启动程序(不仅仅是节点)取决于您的系统设置。这不是普遍行为。
【解决方案2】:

当您使用 express-generator 时,运行应用的默认方式是粘贴

DEBUG={appName}:* npm start

{appName} - 可能是您的文件夹名称(就像我一样),无论如何,您可以在 package.json -> "name";

中找到它

【讨论】:

    【解决方案3】:

    感谢您的最佳答案,最后这对我有用:

    "main": "./bin/www",
    "scripts": {
       "start": "node ./bin/www"
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      相关资源
      最近更新 更多