Почему app.engine по умолчанию не использует layout.hbs по умолчанию - PullRequest
0 голосов
/ 18 ноября 2018

Я создал формат стиля с layout.hbs и заметил, что все страницы не имеют одинаковую согласованность стиля.Я заметил, что я не объявил приложение.движок в app.js.Затем я реализовал код app.engine, чтобы установить макет по умолчанию, который реализован в layout.hbs

app.engine('hbs', hbs ({extname: 'hbs',defaultLayout: 'layout'}));

Произошла ошибка о том, что layout.hbs не может быть найден.Я снова реализовал код, поскольку заметил, что я не направлял каталоги папок в макет .hbs.Поэтому я применил код к

app.engine('hbs', hbs ({extname: 'hbs',defaultLayout: 'layout', layoutsDir:__dirname + '/app_server/views'}));

. Ошибка исчезла, и структура макета по умолчанию, для которой задано layout.hbs, отображается только в индексе локального сервера, а не во всех контроллерах.,Я не очень уверен, что еще мне не хватает

контроллер и код маршрутов

var express = require('express');
var exphbs = require('express-handlebars');
var router = express.Router();
var ctrlCaribbeanIslands = require('../controllers/CaribbeanIslands')



/* GET home page. */
router.get('/', ctrlCaribbeanIslands.login);
router.get('/blog/add',ctrlCaribbeanIslands.addPost);
router.get('/chat/add',ctrlCaribbeanIslands.addChat);
router.get('/review/add',ctrlCaribbeanIslands.addReview);
router.get('/traceYourTravel', ctrlCaribbeanIslands.tracetravel);


**module.exports = router;**

//controller 
module.exports.login = function (req, res) {
  res.render('index', { title: 'login'});
};

module.exports.addPost = function(req, res){
  res.render('index', { title: 'Add Post' });
};

module.exports.addChat = function(req, res){
  res.render('index', { title: 'Add Chat' });
};

module.exports.addReview = function(req, res){
  res.render('index', { title: 'Add Review' });

};
module.exports.tracetravel = function(req, res){
  res.render('index', { title: 'Trace travel' });

};

app.js

var createError = require('http-errors');
var express = require('express');
var handlebars = require('hbs');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var hbs = require ('express-handlebars');


var indexRouter = require('./app_server/routes/index');
var usersRouter = require('./app_server/routes/users');

var app = express();

app.engine('hbs', hbs ({extname: 'hbs',defaultLayout: 'layout', layoutsDir:__dirname + '/app_server/views'}));
app.set('views', path.join(__dirname, 'app_server','views'));
app.set('view engine', 'hbs');
app.use(express.static(path.join(__dirname, 'public')));

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

@ Zrushb Извините, мой плохой, это с app.set, не использовать.Код должен выглядеть так:

const express = require("express"),
hbs = require("hbs"),
mongoose = require("mongoose")
bodyParser = require("body-[arser")

var app = express()
//In ** your database if you need any
mongoose.connect("mongodb:localhost:27017/**")


app.set("view engine", "hbs")

//To get or post

app.set("view engine", "hbs") //Engine HBS
app.set("views", __dirname +"/views") //Folder views (templates)
app.use(express.static("public")) //Public is static (to get .js, images and .css)
app.use('/css',express.static(path.join(__dirname, 'public/stylesheets'))); //Css folder specified (NOT WORKING)
app.use(bodyParser.urlencoded({extended: false})) //Post Body Parser
app.use(bodyParser.json()) //Parser for JSON files
app.use(cookieParser())
hbs.registerPartials(__dirname+ "views/partials")


app.get("/" //etc)

app.post(//etc)
0 голосов
/ 18 ноября 2018

Я думаю, что в экспрессе больше нет рулей, я бы порекомендовал скачать HBS с npm, а затем потребовать его var hbs = require('hbs')

Затем установите механизм просмотра на hbs, как этот -> app.use("view engine", "hbs")

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

...