Express Js EJS 布局错误:未指定默认引擎且未提供扩展名

Posted

技术标签:

【中文标题】Express Js EJS 布局错误:未指定默认引擎且未提供扩展名【英文标题】:Express Js EJS Layouts Error: No default engine was specified and no extension was provided 【发布时间】:2021-03-21 21:48:31 【问题描述】:

您好,我正在尝试在我的应用程序中使用 Express EJS 布局。一旦我尝试app.use(expressEjsLayouts),它就会引发错误。没有它,应用程序工作得很好,但我想为我的模板使用 ExpressEjs-Layouts。请善待我对编码相当陌生:)我已经浏览了很多帖子,但找不到答案。这是我的 server.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)

【问题讨论】:

【参考方案1】:

您需要告诉 express 您正在使用哪个视图引擎。 您可以使用app.set() 方法来完成。 它需要两个参数 1.你在设置什么。在这种情况下,视图引擎 2.你想使用的视图引擎的类型

例如app.set('view engine', 'ejs'); 或app.set('view engine', 'pug');

这里是文档https://expressjs.com/en/guide/using-template-engines.html

【讨论】:

嗨,Noordin,感谢您的快速回答!这似乎是一个简单的拼写错误!经典 :D 而不是app.set('view engine', 'ejs') 我用app.set('view-engine', 'ejs') 非常感谢! 不客气。不用担心,包括我自己在内的很多人都会经常遇到这种情况。

以上是关于Express Js EJS 布局错误:未指定默认引擎且未提供扩展名的主要内容,如果未能解决你的问题,请参考以下文章

Express.js 应用程序错误:Flash 消息未呈现

node.js express+ejs引擎构建第一个项目

Node.js+express+ejs新建个项目

node.js 的页面渲染方法ejs

Express 3 和 EJS 中的布局

Express EJS模板如何传递一个json对象来查看它是不是未定义