将Multer拆分至独立文件后,Express路由回调未定义错误求助
问题修复方案
你遇到的Error: Route.post() requires a callback function but got a [object Undefined]错误,由两个明确的代码问题导致,以下是具体修复步骤:
1. 修正中间件导入的变量名不匹配
你的imagesMiddleware.js导出的是uploadImg,但重构后的listingRoutes.js错误导入了不存在的image变量,直接导致路由使用的中间件为undefined,触发报错。
2. 修正multer中间件的错误封装
multer的upload.single('imgUrl')本身就是符合Express规范的中间件函数,不需要用asyncHandler包裹成async函数,这种写法会让Express无法正确识别中间件。
修正后的代码:
imagesMiddleware.js
const multer = require('multer') const upload = multer({ dest: './backend/uploads' }) // 直接导出multer生成的中间件,无需额外封装 const uploadImg = upload.single('imgUrl') module.exports = { uploadImg }
重构后的listingRoutes.js
const express = require('express') const router = express.Router() const { createListing, getListings, getListing, deleteListing } = require('../controllers/listingController') const { protect } = require('../middleware/authMiddleware') // 导入正确的中间件变量名uploadImg const { uploadImg } = require('../middleware/imagesMiddleware') router.get('/', protect, getListings) // 使用正确的中间件uploadImg router.post('/', uploadImg, protect, createListing) router.get('/:id', protect, getListing) router.delete('/:id', protect, deleteListing) module.exports = router
内容的提问来源于stack exchange,提问作者zztopz
相关产品推荐
相关产品推荐

