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

使用Mongoose保存HBS表单值时遇报错:Parameter "obj" to Document() must be an object, got 14

问题:Mongoose保存数据时报错“Parameter "obj" to Document() must be an object, got 14”

我正在使用Mongoose,尝试通过HBS表单的submit和POST方法保存一个值,提交后在本地主机网页上显示报错:“Parameter "obj" to Document() must be an object, got 14”。

用户提供的代码

路由代码

var express = require('express');
var router = express.Router();
var {grades} = require('../modeloUser');
const buscar ={};
const bodyParser = require('body-parser');
var {Save} = require ('../models/Save');

router.get('/', function(req, res, next) {
  buscar.guardar()
  .then(a=>{
    res.render('obtener',{prop: a});
  })
});

router.post('/save', (req, res) => {
  const save =Save(`${req.body.fname}`)
  console.log("valor esperado"+save);
  return save;
});

buscar.guardar = async()=>{
  const notes = await grades.find({student_id:{$eq:14}});
  return notes; 
}

module.exports = router;

模型代码

const saveSchema = new mongoose.Schema(
    {
      busqueda:Number
   },{
    timestamp:true
   }
 );
 
 const Save = new mongoose.model('Save',saveSchema);

module.exports ={Save}

错误原因

POST路由中创建Mongoose模型实例的方式错误:

  • Mongoose模型构造函数要求传入符合Schema结构的对象,但你直接传入了字符串/数值${req.body.fname},导致Mongoose无法解析成合法的Document对象,触发报错。
  • 另外,创建模型实例时规范写法是new Save(...)(即使Mongoose允许省略new,核心问题仍在于参数类型错误)。

修正方案

修正后的POST路由代码

router.post('/save', async (req, res) => {
  // 1. 将表单提交的字符串转为数字,匹配Schema定义的Number类型
  const busquedaValue = Number(req.body.fname);
  // 2. 传入包含busqueda字段的对象创建模型实例
  const save = new Save({ busqueda: busquedaValue });
  
  try {
    // 3. 异步保存到数据库
    await save.save();
    console.log("保存成功:", save);
    // 保存完成后重定向到首页或返回响应
    res.redirect('/');
  } catch (err) {
    console.error("保存失败:", err);
    res.status(500).send("数据保存出错");
  }
});

额外注意事项

  • 确保Express已配置body-parser解析表单数据,在项目入口文件(如app.js)中添加:
    app.use(bodyParser.urlencoded({ extended: true }));
    
  • 保存操作是异步的,必须用await或.then()处理,否则无法确保数据成功写入数据库。
  • 若req.body.fname可能为空或非数字,建议添加额外的参数校验逻辑,避免无效数据存入。

内容的提问来源于stack exchange,提问作者Aaron Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:31:03