我无法在 NodeJS 上使用 EJS 作为我的视图渲染引擎。
我发现了几个类似的问题,但都说明了安装真正适用于其他人的 EJS。这对我来说不一样,可能是因为我无法为安装选择正确的目录(在 OpenShift 存储库中的许多重复项中)。
我有 OpenShift 模板创建的 NodeJS 默认应用程序。在安装 EJS 依赖项时,我以某种方式搞砸了它,我收到以下错误(不可用模块的标准 NodeJS 错误):
错误:找不到模块“ejs”
    在 Function._resolveFilename (module.js:337:11)
    在 Function._load (module.js:279:25)
    在 Module.require (module.js:359:17)
    在需要(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)
    在 /var/lib/openshift/5123c2494382ec16ca000222/app-root/runtime/repo/server.js:114:17
    在回调(/usr/lib/node_modules/express/lib/router/index.js:272:11)
除了在 package.json 中提到之外,我还尝试通过终端在 app-root、runtime 和 nodejs-0.6 级别安装 ejs(并重新启动应用程序),但没有用。
我的目录结构是:
-应用程序根
- -数据
---回购
-----node_modules(有ejs)
-----server.js
-----package.json ("依赖": {"ejs" : ">=0.8.3"},)
-----观看次数
--------defaultError.ejs
- -运行
-  - -数据
-----node_modules(空)
-----repo(与 app-root/repo 相同)
-------node_modules(有ejs)
-nodejs-0.6
- -数据
---repo(与 app-root/repo 相同)
-----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]);
        }
    };
希望这篇长篇文章能让我的问题清楚:)