JS, Express: не удалось выполнить поиск представления в каталоге независимо от следующего руководства

#javascript #express

#javascript #экспресс

Вопрос:

Я следую этому руководству:https://appdividend.com/2017/06/18/node-js-express-tutorial /

И провел много исследований, но почему-то не могу заставить его работать.

Моя структура папок: введите описание изображения здесь

Мой код:

 // app.js

var express = require('express');
var app = express();
var port = 3000;

app.use(express.static('public'));

app.listen(port, function(){
  console.log('Server is running on port:', port);
})
app.get('/', function(req, res){
    res.send('Hello Express');
});


app.set('view engine', 'ejs');

var itemRouter = express.Router();

app.use('/items', itemRouter);

itemRouter.route('/').get(function (req, res) {
  res.render('items');
});

itemRouter.route('/single').get(function (req, res) {
  res.render('singleItem');
});
  

Мой вывод:

 Error: Failed to lookup view "items" in views directory "C:UsersKarolviews"
    at Function.render (C:UsersKarolnode_modulesexpresslibapplication.js:580:17)
    at ServerResponse.render (C:UsersKarolnode_modulesexpresslibresponse.js:1008:7)
    at C:UsersKarolDesktopCBapp.js:27:7
    at Layer.handle [as handle_request] (C:UsersKarolnode_modulesexpresslibrouterlayer.js:95:5)
    at next (C:UsersKarolnode_modulesexpresslibrouterroute.js:137:13)
    at Route.dispatch (C:UsersKarolnode_modulesexpresslibrouterroute.js:112:3)
    at Layer.handle [as handle_request] (C:UsersKarolnode_modulesexpresslibrouterlayer.js:95:5)
    at C:UsersKarolnode_modulesexpresslibrouterindex.js:281:22
    at Function.process_params (C:UsersKarolnode_modulesexpresslibrouterindex.js:335:12)
    at next (C:UsersKarolnode_modulesexpresslibrouterindex.js:275:10)
  

Это то, что я получаю при посещении localhost:port/items (замените порт фактическим номером порта).

Ответ №1:

Существует проблема с разрешением views пути. Попробуйте запросить path модуль после express

 var express = require('express');
var path = require('path');
var app = express();
var port = 3000;
  

и после установки шаблона ejs добавьте это:

 app.set('view engine', 'ejs');
app.set('views', path.resolve(__dirname, 'views'));
  

Ответ №2:

Заменить :

 app.use('/items', itemRouter);

itemRouter.route('/').get(function (req, res) {
  res.render('items');
});

itemRouter.route('/single').get(function (req, res) {
  res.render('singleItem');
});
  

Автор: :

 itemRouter.route('/items/').get(function (req, res) {
  res.render('items');
});

itemRouter.route('/items/single').get(function (req, res) {
  res.render('singleItem');
});
  

Ответ №3:

 var path = require('path');
  

Попробуйте это, чтобы установить каталог для общего доступа следующим образом.

 app.set('view_engine', 'ejs');
app.set('views', path.join(__dirname,'/views'))
  

Он получит каталог проекта и установит путь к представлениям.