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

将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:11:52