Ошибка: не удалось найти в Express
Примечание: мой автоматический ответ в конце сообщения
Я пытаюсь улучшить опыт nodeJS, и мне не очень нравится получать все script в один файл.
поэтому, следуя сообщению, я использую эту структуру
./
config/
enviroment.js
routes.js
public/
css/
styles.css
images
views
index
index.jade
section
index.jade
layout.jade
app.js
Мои файлы находятся прямо сейчас:
app.js
var express = require('express');
var app = module.exports = express.createServer();
require('./config/enviroment.js')(app, express);
require('./config/routes.js')(app);
app.listen(3000);
enviroment.js
module.exports = function(app, express) {
app.configure(function() {
app.use(express.logger());
app.use(express.static(__dirname + '/public'));
app.set('views', __dirname + '/views');
app.set('view engine', 'jade'); //extension of views
});
//development configuration
app.configure('development', function() {
app.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
});
//production configuration
app.configure('production', function() {
app.use(express.errorHandler());
});
};
routes.js
module.exports = function(app) {
app.get(['/','/index', '/inicio'], function(req, res) {
res.render('index/index');
});
app.get('/test', function(req, res) {
//res.render('index/index');
});
};
layout.jade
!!! 5
html
head
link(rel='stylesheet', href='/css/style.css')
title Express + Jade
body
#main
h1 Content goes here
#container!= body
Индекс /index.jade
h1 algoa
Ошибка, которую я получаю:
Ошибка: не удалось просмотреть просмотр "index/index" в Function.render(c:\xampp\htdocs\nodejs\buses\ node_modules\express\lib\application.js: 495: 17) в render (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js: 614: 9) на сервере ServerResponse.render(c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\response.js: 638: 5) в c:\xampp\htdocs\nodejs\buses\config\routes.js: 4: 7 при обратных вызовах (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 177: 11) at param (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 151:11) at pass (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 158: 5) в Router._dispatch (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 185: 4) в Object.router [в качестве дескриптора] (c:\xampp\htdocs\nodejs\buses\node_modules\express\lib\router\index.js: 45: 10) на следующем (c:\xampp\htdocs\nodejs\buses\node_modules\express\node_modules\connect\lib\proto.js: 191:15)
Но я действительно не знаю, в чем проблема...
Я начинаю думать, потому что модули экспортируют...
Ответ:
Вдали уникальное решение, которое я нашел, - это изменить место, в котором я определил app.set('views') и view engine
Я переместил его в app.js и теперь хорошо работает.
var express = require('express');
var app = module.exports = express.createServer();
require('./config/enviroment.js')(app, express);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
require('./config/routes.js')(app);
app.listen(3000);
Я действительно не понимаю логику этого, но я могу предположить, что он есть.
Ответы
Ответ 1
npm install [email protected]
устанавливает предыдущую версию, если это помогает.
Я знаю, что в 3.x механик представления был удален, но это может быть не ваша проблема. Также замените express.createServer()
на express()
Обновление:
Это ваше __dirname из environment.js
Это должно быть:
app.use(express.static(__dirname + '../public'));
Ответ 2
Добавление к @mihai ответу:
Если вы находитесь в Windows, то просто конкатенация __dirname' + '../public'
приведет к неверному имени каталога (например: c:\dev\app\module../public
).
Вместо этого используйте path
, который будет работать независимо от ОС.
var path = require ('path');
app.use(express.static(path.join(__dirname + '.../public')));
path.join нормализует символ разделителя пути и вернет правильное значение пути.
Ответ 3
Сначала у меня была такая же ошибка, и я был очень раздражен.
вам просто нужно иметь ./
до пути к шаблону
res.render('./index/index');
Надеюсь, что это сработает, работал у меня.
Ответ 4
Это решается добавлением следующего кода в файл app.js
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.set('views', __dirname);
app.get('/', function(req, res){
res.render("index");
});
Ответ 5
Проверьте, что вы использовали надлежащий механизм просмотра.
В моем случае я обновил npm и в итоге меняю двигатель на "hjs" (я пытался удалить нефрит для использования мопса).
Поэтому для меня это изменило его на jade из hjs в файле app.js.
app.set('view engine','jade');
Ответ 6
используйте этот код для решения проблемы.
app.get('/', function(req, res){
res.render("index");
});
Ответ 7
Только что заметил, что я назвал свой файл ' index.html'
вместо 'index.html'
с ведущим пространством. Вот почему он не смог его найти.
Ответ 8
Эта проблема в основном возникает из-за чувствительного к регистру имени файла. Например, если вы сохраняете файл как index.jadge, а не его гриву на маршруте, это должно быть "index", а не "Index" в Windows, это нормально, но в Linux, как сервер, это создаст проблему.
1) если имя файла - index.jadge
app.get('/', function(req, res){
res.render("index");
});
2) если имя файла - Index.jadge
app.get('/', function(req, res){
res.render("Index");
});
Ответ 9
Я меняю имя папки представлений на views_render и также сталкиваюсь с той же проблемой, что и выше, поэтому перезапустите server.js, и она работает для меня.
Ответ 10
Эта ошибка действительно имеет отношение к файлу Path, вот и все, что вам нужно проверить, для меня моей родительской папкой была "Layouts", но моим фактическим файлом был layout.html
, мой путь имел раскладки на обоих, как только я исправил эту ошибку, ушел.
Ответ 11
У меня была та же проблема, и я мог ее исправить с помощью решения от dougwilson: с 5 апреля 2017 года, Github.
- Я изменил имя файла с
index.js
на index.pug
- Затем используется в маршруте
'/'
: res.render('index.pug')
- вместо res.render('index')
- Установите переменную окружения:
DEBUG=express:view
Теперь это работает как шарм.
Ответ 12
Вы можете установить путь к константе, подобной этой, и установить ее с помощью Express.
const viewsPath = path.join(__dirname, '../views')
app.set('view engine','hbs')
app.set('views', viewsPath)
app.get('/', function(req, res){
res.render("index");
});
Это сработало для меня
Ответ 13
У меня тоже была эта проблема в Linux
I had the following
res.render('./views/index')
I changed it too
res.render('../views/index')
Теперь все работает.