You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express Router搭配EJS报错:未指定默认引擎且未提供扩展名

Express应用报错:"No default engine was specified and no extension was provided" 排查方案

问题场景

运行Express应用时触发错误:No default engine was specified and no extension was provided,已确认EJS依赖安装完成,应用配置如下:

index.js

const express = require('express');
const app = express();
app.set('view engine', 'ejs'); // set view engine
const routes = require('./routes'); // import routes file
app.use('/', routes); // use routes
app.listen(3000, () => console.log('Server running on port 3000'));

routes.js

const express = require('express');
const router = express.Router();

const userRoutes = require('./userRoutes');
const locationRoutes = require('./locationRoutes');

router.use('/users', userRoutes);
router.use('/locations', locationRoutes);

module.exports = router;

子路由示例(userRoutes.js)

const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
  res.render('users');
});

module.exports = router;

排查与解决步骤

  • 明确视图目录路径
    Express默认会在项目根目录下的views文件夹查找模板文件,但如果模板文件位置特殊或项目结构导致路径识别异常,需手动指定views目录:
    引入path模块,在index.js中添加配置:

    const path = require('path');
    app.set('views', path.join(__dirname, 'views'));
    

    这一步能确保Express精准定位到模板文件所在目录。

  • 检查模板文件存在性与路径
    确认views目录下存在对应模板文件(如users.ejs),若模板放在子目录(例如views/users/index.ejs),则需修改res.render的路径参数为res.render('users/index')。

  • 手动注册EJS引擎(可选)
    部分场景下仅设置view engine可能未成功绑定引擎,可手动添加引擎注册代码:

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

    强制绑定EJS与Express的模板渲染逻辑。

  • 排查未匹配的路由
    检查是否存在其他路由调用res.render但未指定有效模板,或路由优先级问题导致错误路由被触发。可添加全局错误捕获中间件定位问题:

    app.use((err, req, res, next) => {
      console.error(err.stack);
      res.status(500).send('Something broke!');
    });
    

内容的提问来源于stack exchange,提问作者Rusty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:15:12