【问题标题】:mongoose Model.save() only returns { _id, __v }猫鼬 Model.save() 只返回 { _id, __v }
【发布时间】:2020-10-23 11:15:53
【问题描述】:

我知道以前有人问过这个问题,但我觉得我做的一切都是正确的,但我仍然遇到问题。我想使用 mongoose 将表单中的项目保存到我的 mongodb 集合中。

我的架构:

// stationmodel.js
export const StationSchema = new mongoose.Schema({
   "FDID": String,
   "Fire dept name": String,
   "HQ addr1": String,
   "HQ city": String,
   "HQ state": String,
   "HQ zip": Number,
   "HQ phone": String,
   "Dept Type": String,
   "Organization Type": String,
   "Website": String,
   "Number Of Stations": Number,
   "Primary agency for emergency mgmt": Boolean,
}, {collection: "FEMA_stations"}) 

在我的快递应用中:

// in routes.js
const StationSchema =  require('./stationmodel')
const Station = mongoose.model('Station', StationSchema, 'FEMA_stations')

const addstation = (req, res) => {
   console.log(req.body)
   const newStation = new Station(req.body)
   newStation.save( function(err){
      if (err) { console.error(err) }
      console.log('newStation after save', newStation)
   })
}

const routes = app => {
  app.route('/api/addstation')
    .post(addstation)
}

export default routes
// in index.js
import routes from './routes'

app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())
routes(app)

在我的前端代码中,在 redux 操作中调用后端:

fetch('/api/addstation', {
  method: "POST",
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(stationToAdd)
})

当我在后端console.log(req.body) 时,我得到了我期望的数据。它看起来像这样:

{
  FDID: '202020',
  'Fire dept name': 'Some Fire Department',
  'HQ addr1': 'Some address',
  'HQ city': 'San Dimas',
  'HQ state': 'CA',
  'HQ zip': 99999,
  'HQ phone': '5555555555',
  'Dept Type': 'Career',
  'Organization Type': 'State',
  Website: '',
  'Number Of Stations': 0,
  'Primary agency for emergency mgmt': true,
}

但是当我console.log 我的newStation 我正在尝试.save() 时,我得到的只是这样的回复:

{ _id: 5efe29911ea067248f3c39a0, __v: 0 }

我知道其他人的架构、模型存在问题,确保他们真正连接到他们的 mongodb 集合,或者确保请求是使用 application/json 标头发出的,但我觉得我有那些事情对。该代码是从一个更加模块化的应用程序中拼凑而成的,以尝试减少脂肪并提出核心问题,所以如果我遗漏了任何明显的信息,请告诉我。

这里可能出了什么问题?为什么来自req.body 的数据没有进入我试图保存到集合中的新文档?感谢阅读。

【问题讨论】:

  • 您可能正在寻找console.log('newStation after save', newStation.toObject())
  • 嗯,不,这没有任何改变。我仍然没有看到我的req.body 中的所有属性都显示在我新创建的Station 中。感谢您链接其他帖子,但他们没有回答我的问题。他们关心过滤掉不需要的属性。我的问题更多是关于为什么我的req.body 没有进入我的新文档。我会编辑我的问题,但如果您能将其打开,我将不胜感激
  • 对不起,我没有意识到数据没有正确保存,我以为你只是担心数据在日志中不可见。
  • 不用担心,感谢您打开它。

标签: javascript node.js mongodb express mongoose


【解决方案1】:

您正在将 es6 模块 import/export 与 Node.js CommonJS require 混合使用。

stationmodel.js 你正在使用“命名导出”

export const StationSchema = new mongoose.Schema(...

但在 routes.js 中,您使用的是 CommonJS require

const StationSchema =  require('./stationmodel')

这很可能是一个空对象。因此,以下行将创建一个具有“空”模式的模型

const Station = mongoose.model('Station', StationSchema, 'FEMA_stations')

解决办法

改用import

import { StationSchema } from './stationmodel'

提示:

由于您已经将文件命名为stationmodel.js,这表明它是一个模型。您可以将以下内容直接放入stationmodel.js,以防止模型获取不正确的架构

export const Station = mongoose.model('Station', StationSchema, 'FEMA_stations')

【讨论】:

  • 哇。对如此愚蠢的事情感到非常沮丧。太感谢了。只要允许,我就会奖励赏金。
猜你喜欢
  • 2023-02-22
  • 2018-05-03
  • 2018-11-27
  • 2021-04-18
  • 2013-06-19
  • 2016-11-12
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多