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

ES6语法下Express全局错误中间件报错问题求助

解决TypeError: app.use() requires a middleware function错误

问题根源

你用import * as globalErrorHandler导入的是整个模块的导出对象,而非直接获取错误处理函数。app.use()要求传入一个函数,你传入的是包含目标函数的对象,因此触发了该错误。

两种修复方案

方案1:修改导入语句

保持errorController.js的导出方式不变,将App.js中的导入改为解构导入,直接提取函数:

// App.js
import { globalErrorHandler } from './controller/errorController.js';
// ...
app.use(globalErrorHandler);

方案2:改用默认导出

调整errorController.js的导出为默认导出,和AppError的导出逻辑一致:

// errorController.js
export default function globalErrorHandler (err, req, res, next) {
  console.log(err.stack);
  err.statusCode = err.statusCode || 500;
  err.status = err.status || 'error';

  res.status(err.statusCode).json({
    "status": err.statusCode,
    "message": err.message,
  });
};

随后在App.js中直接默认导入:

// App.js
import globalErrorHandler from './controller/errorController.js';
// ...
app.use(globalErrorHandler);

额外提示

你的AppError类存在一处小笔误:Error.captureStackTrace(this, this.construct);应改为Error.captureStackTrace(this, this.constructor);,否则可能影响错误栈的正常捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:35:24