【问题标题】:Req.body not fetching array value from schema when save data using node使用节点保存数据时,Req.body 未从模式中获取数组值
【发布时间】:2022-01-24 22:58:10
【问题描述】:

当我使用 MongoDB 模式数组中的节点保存数据时,我的代码和输出将是空的,请您解释为什么会发生此错误

controller.js

  const {name,age,social,songs}=new musicModel(req.body)
  
  const addMusic =await musicModel.create({
   name,age,songs,social
  })

  if (addMusic) {
    res.send(addMusic)
  } else {
    res.status(500).send("unsuccessfull.")
  }
}

这是我的架构,但是当我使用邮递员发送响应时它会完美工作,但是当我保存它时,波纹管数组未定义或为空

model.js

const mongoose = require("mongoose")
const songSchema= mongoose.Schema({
  title:{
    type:String
  },
  sales:{
    type:String
  }
})
const musicSchema = mongoose.Schema({
  name: {
    type: String
  },
  age: {
    type: String
  },
  social: {
    show: {
      type: Number
    }, tours: {
      type: Number
    },
  },songs:[songSchema]
})
const musicModel =mongoose.model("Music",musicSchema)
module.exports= musicModel

app.js

const express = require('express')
const logger = require('morgan')
const bodyParser = require('body-parser')
const mongoose = require('mongoose')
require("dotenv/config")

const cors = require('./middleware/cors')

const productsRouter = require('./routes/products')
const customerRouter= require('./routes/customers')
const quotRouter=require('./routes/quots')
const usersRouter = require('./routes/users')

mongoose.connect(
  process.env.CONNECTION_URL,
  { useNewUrlParser: true },
  (err) => {
    if (!err) {
      console.log('DB Connected')
    }
  }
);

const app = express()
app.use(express.static('public'))

app.use(logger('dev'))


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

app.use('/products', productsRouter)
app.use('/customer',customerRouter)
app.use('/', usersRouter)
app.use('/quotation',quotRouter)

module.exports =app;

输出

{
    "name": "ashit",
    "age": "67",
    "social": {
        "show": 566,
        "tours": 47
    },
    "songs": [],
    "_id": "61c57a22a6903d467834d19f",
    "__v": 0
}

【问题讨论】:

    标签: node.js angular express mongoose


    【解决方案1】:

    您可以在这两种类型的代码之间进行选择:

    第一个解决方案:

      const {name,age,social,songs}=req.body
      
      const addMusic =await musicModel.create({
       name,age,songs,social
      })
    
      if (addMusic) {
        res.send(addMusic)
      } else {
        res.status(500).send("unsuccessfull.")
      }
    }
    

    第二种解决方案:

     const {name,age,social,songs}=new musicModel(req.body)
      
      const addMusic =await musicModel.save()
    
      if (addMusic) {
        res.send(addMusic)
      } else {
        res.status(500).send("unsuccessfull.")
      }
    }
    

    【讨论】:

      【解决方案2】:

      尝试这样做:

      1. 声明 songModel 并将其导出:
      const songSchema= mongoose.Schema({
          title:{
            type:String
          },
          sales:{
            type:String
          }
        })
      
      const songModel =mongoose.model("Song",songSchema)
      
      ...
      
      module.exports= { musicModel, songModel }
      
      1. musicSchema 中的songs 属性更改为引用:
      songs:[
          {
              type: mongoose.Schema.Types.ObjectId,
              ref: 'Song',
          }
      ]
      
      1. 创建新歌曲后,同样创建每个歌曲对象并将其引用添加到musicModel 对象:
      const { name, age, social, songs } = req.body;
      
      const addMusic = await musicModel.create({
        name,
        age,
        social,
      });
      
      songs.forEach((song) => {
          const newSong = await songModel.create(song);
          addMusic.songs.push(newSong._id);
      });
      
      await addMusic.save();
      
      if (addMusic) {
        res.send(addMusic);
      } else {
        res.status(500).send("unsuccessfull.");
      }
      

      【讨论】:

      • 音乐验证失败:songs.0._id:在路径“_id”处为值“[]”(类型数组)转换为 ObjectId 失败
      • 使用此代码时遇到上述错误...
      • { "name": "ashit", "age": "67", "social": { "show": 566, "tours": 47 }, "songs": [ null ] , "_id": "61c6bfc0000eecdadc1887b6", "__v": 0 }
      • 仍然得到空值
      • 你能发布console.log(req.body)的结果吗?
      猜你喜欢
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多