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
相关产品推荐
相关产品推荐

