Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Node.js + Express + Handlebars где ошибка 
:(
    Опции темы
Areostar
Дата 1.2.2020, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Начал осваивать Node.js + Express

в качестве шаблонизатора выбрал Handlebars(как в учебнике)

Вот код:
Код

var express = require('express');

var app = express();
var handlebars = require('express-handlebars')
    .create({defaultLayout:'main'});


app.set('port', process.env.PORT || 3000);
app.engine('handlebars', handlebars.engine)
app.set('view engine', 'handlebars')

app.get('/', function(req, res){
    res.render('home')
   // res.type('text/plain');
   // res.send('startPage | Main Page');
});

app.get('/about', function(req, res){
    res.type('text/plain');
    res.send('startPage | About Page');
});

app.use(function(req, res){
    res.type('text/plain');
    res.status(404);
    res.send('404 - Not Found!')
});

app.use(function(err, req, res, next){
    console.error(err.stack);
    res.type('text/plain');
    res.status(500);
    res.send('500 - Server Error');
});

app.listen(app.get('port'), function(){
    console.log('Express is running on http://localhost '+app.get('port')+' press Ctrl+C to exit.')
});



Пока выводил просто текст всё было норм
Попытался вывести шалон:
Код

app.get('/', function(req, res){
    res.render('home')
   // res.type('text/plain');
   // res.send('startPage | Main Page');
}



получаю ошибки:
Цитата

Error: Failed to lookup view "home" in views directory "C:\Workspace\Node\Express\views"
at Function.render (C:\Workspace\Node\Express\node_modules\express\lib\application.js:580:17)
at ServerResponse.render (C:\Workspace\Node\Express\node_modules\express\lib\response.js:1012:7)
at C:\Workspace\Node\Express\startpage.js:13:9
at Layer.handle [as handle_request] (C:\Workspace\Node\Express\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Workspace\Node\Express\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Workspace\Node\Express\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Workspace\Node\Express\node_modules\express\lib\router\layer.js:95:5)
at C:\Workspace\Node\Express\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Workspace\Node\Express\node_modules\express\lib\router\index.js:335:12)
at next (C:\Workspace\Node\Express\node_modules\express\lib\router\index.js:275:10)
at Function.render (C:\Workspace\Node\Express\node_modules\express\lib\application.js:580:17)
at ServerResponse.render (C:\Workspace\Node\Express\node_modules\express\lib\response.js:1012:7)
at C:\Workspace\Node\Express\startpage.js:13:9
at Layer.handle [as handle_request] (C:\Workspace\Node\Express\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Workspace\Node\Express\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Workspace\Node\Express\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Workspace\Node\Express\node_modules\express\lib\router\layer.js:95:5)
at C:\Workspace\Node\Express\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Workspace\Node\Express\node_modules\express\lib\router\index.js:335:12)
at next (C:\Workspace\Node\Express\node_modules\express\lib\router\index.js:275:10)



Тоесть не может найти шаблон.
Шиблоны лежат в папке views/layout
404.handlebars
500.handlebars
about.handlebars
home.handlebars
main.handlebars

что я делаю не так?
PM MAIL   Вверх
Areostar
Дата 2.2.2020, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Исправил так
Код

var express = require('express');
 
var app = express();
var handlebars = require('express-handlebars')
    .create({defaultLayout:'main'});
 
 
app.set('port', process.env.PORT || 3000);
app.engine('handlebars', handlebars.engine)
app.set('view engine', 'handlebars')
app.set("views", "views/layouts");
 
 
app.get('/', function(req, res){
    res.render('home');
});
 
app.get('/about', function(req, res){
    res.render('about')
});


app.use(function(req, res){
res.type('text/plain');
res.status(404);
res.send('404 - Not Found!')
});

app.use(function(err, req, res, next){
console.error(err.stack);
res.type('text/plain');
res.status(500);
res.send('500 - Server Error');
});

app.listen(app.get('port'), function(){
console.log('Express is running on http://localhost '+app.get('port')+' press Ctrl+C to exit.')
});


Старая ошибка исчезла. но полочаю

Цитата

Error: ENOENT: no such file or directory, open 'C:\Workspace\Node\Express\views\layouts\layouts\main.handlebars'


откуда взялся второй \layouts в коде этого нет??
PM MAIL   Вверх
Areostar
Дата 13.2.2020, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1191
Регистрация: 5.4.2008

Репутация: нет
Всего: -2



Перечитал доку по шаблонизатору - нащёл ошибку.

В папках не правельно распологал!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Node.js | Следующая тема »


 




[ Время генерации скрипта: 0.1184 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.