Node.js 在 运行 使用 node 命令但不使用 forever 时有效
Node.js works when run with node command but not with forever
我有一个 Node.js 应用程序,我可以 运行 使用此命令:node app.js
。它启动了,我可以转到我的服务器地址并查看应用程序是否正常运行。但是,当我尝试永远 运行 应用程序时(即使我没有登录,也要将应用程序 运行ning 保留在我的服务器上),使用此命令: ./forever start ../../../app.js
我得到日志文件中出现以下错误:
Error: Failed to lookup view "home" in views directory "/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
,我可以看到该应用正在 运行ning 但无法访问该页面。
编辑:我运行在 Debian 上 Linux
除非你提供更多的数据,并且假设操作系统是 Linux 并且永远安装了 npm install forever -g
,你应该做的是 forever start [../path/to/filename]
,而不是 ./forever
(这将尝试 运行 一个名为 'forever' 的二进制文件在您所在的目录中。
你有两个选择:
a) 运行 永远按照我告诉你的方式从主目录开始
b) 在你的 app.js 中使用绝对路径,或使用相对路径到 ../../../../node_modules/forever
我推荐一个)。
尝试使用 dirname
,这样无论您的应用如何,您的路径都是相同的 运行。
所以你会得到类似这些语句的东西
app.set('views', __dirname + '/views');
和
app.use(express.static(__dirname + 'public'));
试一试,看看是否有效!
当您从 node_modules 永远 运行 时,您的工作目录完全乱套了。而是将 "start" 脚本添加到 package.json:
scripts: [
"start": "forever start app.js"
]
此方法使用您在 package.json 中指定的 forever 版本,不需要使用 -g 安装任何东西。此外,工作目录将是具有 app.js 的同一个文件夹,一切都应该正常工作。
现在,任何系统上的任何用户都应该能够 运行 npm install
然后 npm start
并立即启动和 运行ning 您的应用程序。
我有一个 Node.js 应用程序,我可以 运行 使用此命令:node app.js
。它启动了,我可以转到我的服务器地址并查看应用程序是否正常运行。但是,当我尝试永远 运行 应用程序时(即使我没有登录,也要将应用程序 运行ning 保留在我的服务器上),使用此命令: ./forever start ../../../app.js
我得到日志文件中出现以下错误:
Error: Failed to lookup view "home" in views directory "/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
,我可以看到该应用正在 运行ning 但无法访问该页面。
编辑:我运行在 Debian 上 Linux
除非你提供更多的数据,并且假设操作系统是 Linux 并且永远安装了 npm install forever -g
,你应该做的是 forever start [../path/to/filename]
,而不是 ./forever
(这将尝试 运行 一个名为 'forever' 的二进制文件在您所在的目录中。
你有两个选择:
a) 运行 永远按照我告诉你的方式从主目录开始
b) 在你的 app.js 中使用绝对路径,或使用相对路径到 ../../../../node_modules/forever
我推荐一个)。
尝试使用 dirname
,这样无论您的应用如何,您的路径都是相同的 运行。
所以你会得到类似这些语句的东西
app.set('views', __dirname + '/views');
和
app.use(express.static(__dirname + 'public'));
试一试,看看是否有效!
当您从 node_modules 永远 运行 时,您的工作目录完全乱套了。而是将 "start" 脚本添加到 package.json:
scripts: [
"start": "forever start app.js"
]
此方法使用您在 package.json 中指定的 forever 版本,不需要使用 -g 安装任何东西。此外,工作目录将是具有 app.js 的同一个文件夹,一切都应该正常工作。
现在,任何系统上的任何用户都应该能够 运行 npm install
然后 npm start
并立即启动和 运行ning 您的应用程序。