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

Express出现Route.post()需回调函数却得到[object String]报错如何解决

报错根本原因

Express 中router.route(基础路径)的作用是预先绑定当前路由的根路径,返回的路由实例后续链式调用的.post()、.get()等方法,仅接受中间件函数、路由处理函数作为参数,不支持再传入额外路径字符串。
你在blog.route.js中的写法是先通过.route('/')绑定了基础路径,之后.post()第一个参数传入了字符串'manageBlogs',不符合参数要求,Express 期望接收回调函数却拿到了字符串,因此抛出对应报错。

正确配置方案

根据你实际需要的接口路径选择对应写法即可:

方案1:期望POST接口路径为 /blogs/manageBlogs

有两种等效写法可选:

  • 写法A:将子路径配置在route方法中
// blog.route.js 代码修改为
const express = require('express');
const blogController = require('../../controllers/blog.controller');

const router = express.Router();

router
   .route('/manageBlogs')
   .post(blogController.createBlog)

module.exports = router;
  • 写法B:不使用链式调用,直接声明路由
// blog.route.js 代码修改为
const express = require('express');
const blogController = require('../../controllers/blog.controller');

const router = express.Router();

router.post('/manageBlogs', blogController.createBlog)

module.exports = router;

方案2:期望POST接口路径为 /blogs/

直接删除.post()方法中多余的字符串参数即可,也就是你测试验证过的可用写法:

// blog.route.js 代码修改为
router
   .route('/')
   .post(blogController.createBlog)
额外注意

你当前的blog.controller.js中直接使用了blogService但没有导入该模块,后续运行会触发blogService is not defined报错,需要在文件顶部补全导入语句:

const httpStatus = require('http-status');
const catchAsync = require('../utils/catchAsync');
// 新增导入blogService
const { blogService } = require('../services');

const createBlog = catchAsync(async (req, res) => {
    const blog = await blogService.createBlog(req.body);
    res.status(httpStatus.CREATED).send(blog);
});

module.exports = {
    createBlog
}; 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:18:04