Я не могу использовать EJS в качестве движка рендеринга представления на NodeJS.
Я нашел несколько похожих вопросов, но все они говорят об установке EJS, которые действительно работают для других. Для меня это не то же самое, может быть, потому что я не могу выбрать правильный каталог (среди множества дубликатов в репозитории OpenShift) для установки.
У меня есть приложение NodeJS по умолчанию, созданное с помощью шаблона OpenShift. При установке зависимости EJS я как-то прикрутил ее и получаю следующую ошибку (стандартная ошибка NodeJS для недоступного модуля):
Error: Cannot find module 'ejs' at Function._resolveFilename (module.js:337:11) at Function._load (module.js:279:25) at Module.require (module.js:359:17) at require (module.js:375:17) at View.templateEngine (/usr/lib/node_modules/express/lib/view/view.js:134:38) at Function.compile (/usr/lib/node_modules/express/lib/view.js:68:17) at ServerResponse._render (/usr/lib/node_modules/express/lib/view.js:417:18) at 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 at callbacks (/usr/lib/node_modules/express/lib/router/index.js:272:11)
Помимо упоминания в package.json, я попытался установить ejs через терминал на уровне app-root, runtime и nodejs-0.6 (и перезапустить приложение), но без толку.
Моя структура каталогов:
-app-root ---data ---repo -----node_modules (has ejs) -----server.js -----package.json ("dependencies": {"ejs" : ">=0.8.3"},) -----views -------defaultError.ejs ---runtime -----data -----node_modules (empty) -----repo (identical to app-root/repo) -------node_modules (has ejs) -nodejs-0.6 ---data ---repo (identical to app-root/repo) -----node_modules (has ejs) ---runtime -----node_modules (empty) -----repo (identical) -------node_modules (has 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]);
}
};
Надеюсь, этот длинный пост проясняет мою проблему :)