我无法在 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]);
}
};
希望这篇长篇文章能让我的问题清楚:)