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

Node.js中Express路由运行报错无默认引擎未提供扩展名,如何解决?

报错根本原因

这个错误本质是代码中调用了res.render()方法渲染模板,但你注释了Express的模板引擎相关配置,找不到渲染引擎导致抛出异常。同时你存在路由挂载方式错误的问题,大部分接口无法正常匹配,最终走到错误处理逻辑触发了res.render("error")调用。

具体问题及修复方案

1. 路由挂载方法使用错误

你在路由入口index.js中用router.get()挂载子路由,这是完全错误的用法:

  • router.get()仅用来处理GET类型的请求,无法匹配子路由中定义的POST、DELETE等其他请求方法
  • 挂载路由中间件必须使用router.use()

修复方式:将index.js中挂载子路由的代码全部替换为use方法:

// 原来的错误写法
// router.get("/user",userRouter);
// router.get("/qeustion",qeustionRouter);
// router.get("/questionToTest",questionToTestRouter);
// router.get("/test",testRouter);
// router.get("/subject",subjectRouter);

// 替换为正确写法
router.use("/user",userRouter);
router.use("/qeustion",qeustionRouter);
router.use("/questionToTest",questionToTestRouter);
router.use("/test",testRouter);
router.use("/subject",subjectRouter);

注意:你这里的qeustionRouter拼写存在错误,正确拼写应为questionRouter,如果对应文件名是正确的记得同步修改,避免路由加载失败

2. 移除不必要的res.render调用(前后端分离接口场景)

如果你开发的是纯接口服务,不需要服务端渲染页面,可以直接把所有res.render调用替换为接口返回逻辑:

  1. 替换index.js根路由的render调用:
// 原来的错误写法
// res.render("index", { title: "Express is run" });
// 替换为
res.json({ title: "Express is run" });
// 或者直接返回文本 res.send("Express is run")
  1. 替换app.js中两处错误处理的render调用:
// 开发环境错误处理
app.use(function (err, req, res, next) {
  res.status(err.status || 500);
  // 替换res.render为json返回
  res.json({
    message: err.message,
    error: err.stack,
  });
});

// 生产环境错误处理
app.use(function (err, req, res, next) {
  res.status(err.status || 500);
  // 替换res.render为json返回
  res.json({
    message: err.message,
    error: {},
  });
});

3. 保留服务端渲染场景的修复方式

如果你确实需要使用服务端渲染页面,就把app.js中注释的模板引擎配置打开,同时确保:

  • 安装对应模板依赖:比如你用jade的话执行npm install jade
  • views目录下存在index.jade和error.jade两个模板文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:06:00