Node.js MongoDB报错ERR_INVALID_ARG_TYPE:新手求助
排查Node.js+MongoDB添加数据时的ERR_INVALID_ARG_TYPE错误
我是Node.js和MongoDB的新手,在使用Postman向MongoDB添加数据时遇到错误,错误信息为:{"code": "ERR_INVALID_ARG_TYPE"}。以下是相关代码文件,请协助排查:
路由代码
router.route('/user/getAll').get(userController.getDataConntrollerfn);
userController.js
var createUserControllerFn = async (req, res) => { const userModelData = new userModel(req.body) try { await userModelData.save() res.status(201).send(userModel); } catch(error) { res.status(400).send(error); } }
userModel.js
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var userSchema = new Schema({ name: { type: String, required: true }, address: { type: String, required: true }, phone: { type: String, required: true } }); module.exports = mongoose.model('employees', userSchema);
MongoDB连接代码
mongoose.connect("mongodb://localhost:27017/est",{useNewUrlParser: true, useUnifiedTopology: true },function checkDB(error) { if(error) { console.log("errorr") } else { console.log("DB Connectedddd!!!!!!!!!!!") } }); server.use(cors()); server.use(express.json()); server.use(routes); server.use(bodyParser.json()); server.listen(8040,function check(error) { if(error) { console.log("errorr") } else { console.log("startedddddd") } });
错误原因及修复方案
控制器响应参数错误
控制器中res.status(201).send(userModel);这一行,userModel是Mongoose的模型构造函数,并非保存后的实例对象,send方法无法序列化该类型,直接触发ERR_INVALID_ARG_TYPE错误。
修复:将该行改为res.status(201).send(userModelData);,发送保存后的实例数据。缺少POST请求路由
当前仅配置了GET请求的/user/getAll路由,没有对应添加数据的POST路由,Postman发送的请求找不到处理逻辑。
修复:添加POST路由,示例如下:router.route('/user/create').post(userController.createUserControllerFn);重复的JSON解析中间件
连接代码中同时使用server.use(express.json());和server.use(bodyParser.json());,两者功能完全重复,建议删除其中一个,保留express.json()即可(Express 4.16+版本已内置该功能)。
内容的提问来源于stack exchange,提问作者abi jega
相关产品推荐
相关产品推荐

