在OpenShift NodeJS模板上找不到EJS模块
我无法使用EJS作为NodeJS上的视图渲染引擎。
我发现了几个类似的问题,但都说明安装真正适用于其他人的EJS。 这对我来说不一样,可能是因为我无法select正确的目录(在OpenShift repo中有很多重复项目)来安装。
我有由OpenShift模板创build的NodeJS默认应用程序。 当安装EJS依赖我以某种方式搞砸了,我得到以下错误(标准的NodeJS错误为不可用的模块):
错误:找不到模块'ejs' 在Function._resolveFilename(module.js:337:11) 在Function._load(module.js:279:25) 在Module.require(module.js:359:17) 在require(module.js:375:17) 在View.templateEngine(/usr/lib/node_modules/express/lib/view/view.js:134:38) 在Function.compile(/usr/lib/node_modules/express/lib/view.js:68:17) 在ServerResponse._render(/usr/lib/node_modules/express/lib/view.js:417:18) 在ServerResponse.render(/usr/lib/node_modules/express/lib/view.js:318:17) at /var/lib/openshift/5123c2494382ec16ca000222/app-root/runtime/repo/server.js:114:17 在callback(/usr/lib/node_modules/express/lib/router/index.js:272:11)
除了在package.json中提到,我尝试通过terminal在应用程序根,运行时和nodejs-0.6级别(以及重新启动应用程序)安装ejs,但没用。
我的目录结构是:
-app根 - -数据 ---回购 ----- node_modules(有ejs) ----- server.js ----- package.json(“dependencies”:{“ejs”:“> = 0.8.3”},) -----意见 ------- defaultError.ejs - -运行 - - -数据 ----- node_modules(空) -----回购(与app-root / repo相同) ------- node_modules(有ejs) -nodejs-0.6 - -数据 ---回购(相同的应用程序根/回购) ----- node_modules(有ejs) - -运行 ----- node_modules(空) -----回购(相同) ------- node_modules(有ejs)
defaultError.ejs只是纯html。 server.js有以下内容:
self.createRoutes = function() { self.routes = { }; //... self.routes['/'] = function(req, res) { res.setHeader('Content-Type', 'text/html'); res.send(self.cache_get('index.html') ); }; self.routes['/helloejs'] = function(req, res){ res.render('defaultError', { layout:false } ); }; }; self.initializeServer = function() { self.createRoutes(); self.app = express.createServer(); self.app.set('view engine', 'ejs'); // Add handlers for the app (from the routes). for (var r in self.routes) { self.app.get(r, self.routes[r]); } };
希望这个长的post使我的问题清楚:)
错误是由于使用不正确的目录。 您必须安装软件包并从您的项目目录运行您的应用程序。 这是我用作项目的文件夹的目录结构。
. ├── app.js ├── node_modules │ ├── express │ ├── jade │ └── socket.io ├── package.json ├── public │ ├── images │ ├── javascripts │ └── stylesheets ├── routes │ ├── index.js ├── server.js └── views └── layout.jade
使用此文件夹中的npm install
,在node_modules子文件夹(如express
, socket.io
)中添加包文件夹。 您应该使用此位置的node
,因为所有本地安装的模块只能从该文件夹中看到。
我的情况,我只是在package.json手动添加ejs:
{ "name": "myApp" "dependencies": { "express": "^4.12.2", "ejs": "^1.0.0" } }
并运行npm install (可能需要使用sudo运行)请注意,ejs默认查看views目录
当安装ejs时,你必须使用选项–save:
npm install ejs --save
并创build.gitignore文件:
node_modules