Подтвердить что ты не робот

Ошибка: не удалось найти в 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);

Я действительно не понимаю логику этого, но я могу предположить, что он есть.

4b9b3361

Ответ 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.

  1. Я изменил имя файла с index.js на index.pug
  2. Затем используется в маршруте '/': res.render('index.pug') - вместо res.render('index')
  3. Установите переменную окружения: 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')

Теперь все работает.