Node.js在使用node命令运行时有效,但不能永久运行

时间:2017-06-16 21:02:22

标签: javascript node.js linux express forever

我有一个Node.js应用程序,我可以使用此命令正常运行:node app.js。它启动,我可以转到我的服务器地址,看到应用程序工作。但是,当我尝试永远运行应用程序时(即使我没有登录也要保持应用程序在我的服务器上运行),使用此命令:./forever start ../../../app.js我在日志文件中收到以下错误:

  

错误:无法查找视图" home"在views目录" / root / ExerciseApp / node_modules / forever / bin / views"

这是我的目录结构:

ExerciseApp
  /nbproject
    project.properties
    project.xml
  /public
    /css
      style.css
    /scripts
      buttons.js
  /views
    /layouts
      main.handlebars
    home.handlebars
    update.handlebars
  app.js
  .gitignore
  dbcon.js
  package.json

以下是 app.js 的相关部分:

//*****Express stuff*********
var express = require('express');
var app = express();
app.use(express.static('public'));

//*****BodyParser stuff*******
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

//*****Handlebars stuff******
//Create instance of handlebars let it know default layout is 'main'
//Default layout is the area all the other contents will be inserted
var handlebars = require('express-handlebars').create({defaultLayout:'main'});
//.handlebars extensions are managed by handlebars
app.engine('handlebars', handlebars.engine);
//Lets us ignore .handlebars extensions
app.set('view engine', 'handlebars');

var helpers = require('handlebars-helpers')();
var moment = require('moment');

//*****MySQL stuff******
var mysql = require('./dbcon.js');

app.set('port', 3645);

如果我执行命令./forever list,我可以看到该应用正在运行,但访问该页面并不起作用。

编辑:我在Debian Linux上运行它

3 个答案:

答案 0 :(得分:0)

除非您提供更多数据,并且假设操作系统是Linux并且永远安装了npm install forever -g,您应该做的是forever start [../path/to/filename],而不是./forever(它会尝试运行在您所在的目录中名为“forever”的二进制文件。

您有两种选择:

a)按照我告诉你的方式永远从主目录运行

b)在app.js中使用绝对路径,或者在../../../../ node_modules / forever中使用相对路径

我建议a)。

答案 1 :(得分:-1)

尝试使用dirname,这样无论您的应用运行方式如何,您的路径都是相同的。

所以你会有类似这些陈述的东西

app.set('views', __dirname + '/views');

app.use(express.static(__dirname + 'public'));

试一试,看看它是否有效!

答案 2 :(得分:-2)

当您从node_modules永远运行时,您的工作目录完全没有了。而是添加一个" start"你的package.json的脚本:

scripts: [
  "start": "forever start app.js"
]

此方法使用您在package.json中指定的永久版本,并且不需要使用-g安装任何内容。此外,工作目录将是具有app.js的相同文件夹,一切都应该正常工作。

现在,任何系统上的任何用户都应该能够npm install然后npm start运行,并立即启动并运行您的应用。