2014-06-18 24 views
7

Khi tôi cài đặt một ứng dụng giàn giáo nhanhnút Supervisor .js "ứng dụng nút Program thoát với mã 0" lỗi

express 

Sau đó chạy NPM cài đặt

npm install 

và sau đó chạy giám sát

supervisor app 

Tôi nhận được

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

Tệp app.js là phiên bản mặc định cơ bản.

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; 
+1

'mã 0' không phải là lỗi. Nó cho biết chương trình đã hoàn tất thành công hoặc 'process.exit()' được gọi mà không có tham số. Bạn cần phải đăng mã cho 'app.js' để được trợ giúp thêm. Điều này là không đủ để làm nhiều hơn nữa. –

+0

Bạn có thể chỉ cần chạy 'supervisor app.js', có vẻ như bạn đã quên tập tin ext? – jiminikiz

+0

@Matt Bakaitis Tôi đã thêm tệp app.js. Không có gì ngoài một phiên bản Express.js cơ bản. – William

Trả lời

18

Các ứng dụng mà máy phát tạo ra các cuộc gọi ./bin/www bao gồm app.js và sau đó bắt đầu nghe cho giao thông.

app.jskhông tự thực hiện việc này.

Tôi nghĩ điều này rất quan trọng để hiểu.

app.listenkhông được gọi trong app.js nhưng được gọi trong ./bin/www ... và đây là lý do tại sao bạn sẽ có được kết quả exit 0. Khi bạn gọi app.js và không phải ./bin/www nó chạy qua tệp nhưng vì không có lệnh để nghe lưu lượng truy cập, chương trình sẽ kết thúc bình thường ... tức là. mà không làm gì cả.

Điều đó nói rằng, bạn có hai lựa chọn ..

Lựa chọn 1

Nếu bạn có một tập tin ./bin/www, bạn có thể chạy supervisor ./bin/www để có được những thứ bắt đầu.

Lựa chọn 2

Nếu bạn không có các tập tin ./bin/www vì lý do gì, bạn có thể chỉnh sửa tập tin ứng dụng của bạn trông như thế này.

Trong danh sách ứng dụng của bạn, thay thế

module.exports = app; 

với

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

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

Lưu ý quan trọng này

Trong khi đó chỉnh sửa sẽ bắt đầu lắng nghe ứng dụng và bạn sẽ không nhận được một exit 0 nữa, tôi không thể đảm bảo rằng ứng dụng sẽ không gặp sự cố với một số lỗi khác nếu các tệp và đạo diễn khác es bị thiếu. Ví dụ: nếu thư mục routes không có, thì các khai báo yêu cầu routes/indexroutes/users sẽ không thành công và những điều xấu khác sẽ xảy ra.

+0

Tôi đã sử dụng phiên bản trước của nút/express và chỉ cập nhật tối nay và tôi không sử dụng cấu trúc lệnh mới hơn. Tôi đã không sử dụng npm bắt đầu bởi vì nó không cập nhật khi bạn viết mã, đó là lý do tại sao tôi đang cố gắng sử dụng người giám sát. Sử dụng lệnh "bắt đầu ứng dụng giám sát" hoạt động trên một ứng dụng cũ hơn tôi đã tạo nhưng nó không có mã trong bài đăng này. – William

+0

đã cập nhật câu trả lời của tôi. nếu bạn không hiểu rõ lý do tại sao 'supervisor app' trả về' exit 0' hoặc tại sao gọi 'supervisor./bin/www' là một giải pháp thay thế, hãy xem một số hướng dẫn express.js và ghé thăm trang github của dự án. trang github có nhiều dự án ví dụ tốt có thể thực sự hữu ích khi bắt đầu. –

+0

Tại sao nhấp vào nút chạy tệp www? –

-2

Cảm ơn cho câu trả lời tốt nhất, cuối cùng công trình này cho tôi:

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

Mặc định cách để chạy ứng dụng của bạn, khi bạn sử dụng nhanh-máy phát điện, là để dán

DEBUG={appName}:* npm start

{appName} - có lẽ là tên thư mục của bạn (như cho tôi), dù sao, bạn có thể tìm thấy nó trong package.json -> "name";

Các vấn đề liên quan