在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子文件夹(如expresssocket.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