Node.js MVC模式实践报错:访问/api/v1/test/some触发类型错误
错误原因分析
这个TypeError [ERR_INVALID_ARG_TYPE]的核心问题是:代码中某个位置错误地将testcontroller函数/模块对象,传递给了需要接收字符串、Buffer、数组类等类型参数的方法,导致参数类型不匹配。结合你的Express MVC场景,最常见的触发点有两个:
常见错误场景及修复
场景1:路由配置错误传递控制器
如果你的testroutes.js写成了下面这样,就会直接触发错误:
const express = require('express'); const router = express.Router(); const testcontroller = require('../controllers/testcontroller'); // 错误:直接把整个控制器模块(或控制器函数)传给了路由方法 router.get('/some', testcontroller);
Express的路由方法(如router.get)需要接收具体的请求处理函数,而不是整个控制器模块。修复方式是引用控制器内定义的处理方法:
// 假设testcontroller.js导出了名为handleSome的处理函数 router.get('/some', testcontroller.handleSome);
场景2:控制器内部响应方法传参错误
如果你的testcontroller.js里存在这样的错误代码,也会抛出该异常:
exports.handleSome = (req, res) => { // 错误:把testcontroller函数本身传给了res.send res.send(testcontroller); };
res.send()、res.json()这类响应方法需要接收字符串、对象、Buffer等合法响应内容,不能传入函数。修复方式改为传递合法内容:
exports.handleSome = (req, res) => { res.send('请求处理成功'); // 或者返回JSON格式数据 // res.json({ code: 200, msg: 'success' }); };
你可以对照错误栈里的具体文件和行号,快速定位是路由配置还是控制器内部的代码问题。
内容的提问来源于stack exchange,提问作者Ujjwal Soni
相关产品推荐
相关产品推荐

