Ошибка макетов Express Js EJS: не указан механизм по умолчанию и не предоставлено расширение

Привет, я пытаюсь использовать макеты Express EJS в своем приложении. При попытке app.use(expressEjsLayouts) выдает ошибку. Без него приложение прекрасно работает, но я бы хотел использовать ExpressEjs-Layouts для своих шаблонов. Пожалуйста, будьте добры, я новичок в кодировании :) Я уже просмотрел много сообщений, но не нашел ответа. Вот мой сервер.js

if (process.env.NODE_ENV !== 'production') {
  require('dotenv').config()
}

const express = require('express')
const app = express()
const passport = require('passport')
const flash = require('express-flash')
const session = require('express-session')
const methodOverride = require('method-override')
const indexRouter = require("./routes/index")

app.use(express.urlencoded({ extended: false }))
app.use(flash())
app.use(session({
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false
}))

app.use(passport.initialize())
app.use(passport.session())
const initializePassport = require('./passport-config')
const expressEjsLayouts = require('express-ejs-layouts')

initializePassport(
  passport,
  email => indexRouter.users.find(user => user.email === email),
  id => indexRouter.users.find(user => user.id === id)
)    
// Set Template Engine
app.use(expressEjsLayouts) // THIS SEEMS TO BE WHAT MAKES IT CRASH
app.set("layout", "layouts/layout") 
app.set('view-engine', 'ejs')
app.set("views", __dirname + "/views")


// Static Files
app.use(express.static("public"))


app.use("/", indexRouter.router)
app.use(methodOverride('_method'))

app.listen(process.env.PORT || 3000)

Это ошибка:

Error: No default engine was specified and no extension was provided.
    at new View (C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\express\lib\view.js:61:11)
    at Function.render (C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\express\lib\application.js:570:12)
    at ServerResponse.render (C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\express\lib\response.js:1012:7)
    at ServerResponse.res.render [as __render] (C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\express-flash\lib\express-flash.js:29:16)
    at C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\express-ejs-layouts\lib\express-layouts.js:113:20
    at tryHandleCache (C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\ejs\lib\ejs.js:260:5)
    at View.exports.renderFile [as engine] (C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\ejs\lib\ejs.js:485:10)
    at View.render (C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\admin\Documents\Alles mit JS\gefahrengueterproject\node_modules\express\lib\application.js:592:3)
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 961
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно сообщить Express, какой движок просмотра вы используете. Вы можете сделать это, используя метод app.set(). принимает два параметра 1. что вы устанавливаете. в этом случае механизм просмотра 2. тип механизма просмотра, который вы хотите использовать

например app.set('view engine', 'ejs'); или app.set('view engine', 'pug');

Вот документация https://expressjs.com/ru/guide/using-template-engines.html

Привет, Нордин, спасибо за быстрый ответ! Кажется, это была простая орфографическая ошибка! Классика :D Вместо app.set('view engine', 'ejs') я использовал app.set('view-engine', 'ejs') Большое спасибо!

Marvin A. 10.12.2020 14:40

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

Noordin Abdulkadir 10.12.2020 14:54

Возможно, вам потребуется добавить расширение к имени представления.

Это выдает ошибку в моем случае:

response.render("register", { message: existsMessage });

Но это работает:

response.render("register.ejs", { message: existsMessage });

Несмотря на то, что я определил это в верхней части моего сервера:

app.set("view-engine", "ejs"); 

Мои представления находятся в каталоге представлений

Другие вопросы по теме