Javascript Node.js POST请求发送对象数组而不仅仅是对象

Javascript Node.js POST请求发送对象数组而不仅仅是对象,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,正如你在图片中看到的,它什么也保存不了。POST请求正在工作,但我发送到后端的数据只保存ID为的新对象,而不是我提供的数据,我指的是对象数组 我没有任何错误或东西的状态是好的。我正在和邮递员测试这个。 这是邮递员的邮件请求 我将添加一些代码 这就是模型 const mongoose = require("mongoose"); const dataModelScheme = new mongoose.Schema({ _id: mon

正如你在图片中看到的,它什么也保存不了。POST请求正在工作,但我发送到后端的数据只保存ID为的新对象,而不是我提供的数据,我指的是对象数组

我没有任何错误或东西的状态是好的。我正在和邮递员测试这个。 这是邮递员的邮件请求

我将添加一些代码

这就是模型

    const mongoose = require("mongoose");
    
    const dataModelScheme = new mongoose.Schema({
        _id: mongoose.Schema.Types.ObjectId,
        personalData: [{
            _id: mongoose.Schema.Types.ObjectId,
            title: String,
            firstName: String,
            lastName: String,
            email: String,
            birthday: String,
            telephone: Number,
            driveLicense: String,
            status: Number,
            employmentType: String,
            job: String,
        }],
        career: [{
            _id: mongoose.Schema.Types.ObjectId,
            name: String,
            startDate: Number,
            endDate: Number,
            description: String,
        }],
        education: [{
            _id: mongoose.Schema.Types.ObjectId,
            name: String,
            description: String
        }],
        skills: [{
            _id: mongoose.Schema.Types.ObjectId,
            name: String,
            description: String
        }],
        user: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        },
    });
    module.exports = mongoose.model('ModelSchema', dataModelScheme);
这是控制器

    async store(req, res) {
        const { user_id } = req.headers;

        const user = await User.findById(user_id);

        if (!user) {
            return res.status(400).json({ error: 'User does not exist'});
        }

        const modelData = new ModelData({
            _id: new mongoose.Types.ObjectId(),
            user: user_id,
            personalData: [{
                _id: new mongoose.Types.ObjectId(),
                title: req.body.personalData.title,
                firstName: req.body.personalData.firstName,
                lastName: req.body.personalData.lastName,
                email: req.body.personalData.email,
                birthday: req.body.personalData.birthday,
                telephone: req.body.personalData.telephone,
                driveLicense: req.body.personalData.driveLicense,
                status: req.body.personalData.status,
                employmentType: req.body.personalData.employmentType,
                job: req.body.personalData.job,
            }],
            skills: [{
                _id: new mongoose.Types.ObjectId(),
                name: req.body.skills.name,
                description: req.body.skills.description,
            }],
            education: [{
                _id: new mongoose.Types.ObjectId(),
                name: req.body.education.name,
                description: req.body.education.description,
            }],
        });
        modelData.save().then(result => {
            res.status(201).json(result);
            console.log(req.body.personalData, "req.body");
            console.log(result, "result");
        }).catch(error => {
            res.status(500).json({error: error});
        });
    },

您正在发送一个对象数组,但正在尝试使用点符号将其作为对象读取。您需要通过在括号中提供索引将它们作为数组读取。我不会介绍你所有的财产,但这是你需要做的要点`

  const modelData = new ModelData({
        _id: new mongoose.Types.ObjectId(),
        user: user_id,
        personalData: [{
            _id: new mongoose.Types.ObjectId(),
            title: req.body.personalData[0].title,
            firstName: req.body.personalData[0].firstName,
            lastName: req.body.personalData[0].lastName,
          // DO similar for the rest of your properties
        }],

`

您正在发送一个对象数组,但试图使用点符号将其作为对象读取。您需要通过在括号中提供索引将它们作为数组读取。我不会介绍你所有的财产,但这是你需要做的要点`

  const modelData = new ModelData({
        _id: new mongoose.Types.ObjectId(),
        user: user_id,
        personalData: [{
            _id: new mongoose.Types.ObjectId(),
            title: req.body.personalData[0].title,
            firstName: req.body.personalData[0].firstName,
            lastName: req.body.personalData[0].lastName,
          // DO similar for the rest of your properties
        }],

`这是因为在创建模型时,您只传递了一个有关个人数据、技能和教育的元素。试试这样的东西

const modelData = new ModelData({
            _id: new mongoose.Types.ObjectId(),
            user: user_id,
            personalData: req.body.personalData.map(personalData => {
                return {
                    _id: new mongoose.Types.ObjectId(),
                    title: personalData.title,
                    firstName: personalData.firstName,
                    lastName: personalData.lastName,
                    email: personalData.email,
                    birthday: personalData.birthday,
                    telephone: personalData.telephone,
                    driveLicense: personalData.driveLicense,
                    status: personalData.status,
                    employmentType: personalData.employmentType,
                    job: personalData.job
                };
            }),
            skills: req.body.skills.map(skill => {
                return {
                    _id: new mongoose.Types.ObjectId(),
                    name: skill.name,
                    description: skill.description
                };
            },
            education: req.body.education.map(education => {
                return {
                    _id: new mongoose.Types.ObjectId(),
                    name: education.name,
                    description: education.description
                };
            }
        });

这是因为在创建模型时,您只传递了一个有关个人数据、技能和教育的元素。试试这样的东西

const modelData = new ModelData({
            _id: new mongoose.Types.ObjectId(),
            user: user_id,
            personalData: req.body.personalData.map(personalData => {
                return {
                    _id: new mongoose.Types.ObjectId(),
                    title: personalData.title,
                    firstName: personalData.firstName,
                    lastName: personalData.lastName,
                    email: personalData.email,
                    birthday: personalData.birthday,
                    telephone: personalData.telephone,
                    driveLicense: personalData.driveLicense,
                    status: personalData.status,
                    employmentType: personalData.employmentType,
                    job: personalData.job
                };
            }),
            skills: req.body.skills.map(skill => {
                return {
                    _id: new mongoose.Types.ObjectId(),
                    name: skill.name,
                    description: skill.description
                };
            },
            education: req.body.education.map(education => {
                return {
                    _id: new mongoose.Types.ObjectId(),
                    name: education.name,
                    description: education.description
                };
            }
        });

那么GET请求会是怎样的呢?像这样的<代码>异步显示(req,res){const modelData=wait modelData.find().where({“user”:req.params.id}).exec();if(!modelData){return res.status(204).json({error:“No Data”});}return res status(200).send(modelData);}你几乎是对的:异步显示(req,res){const modelData=wait modelData.find({“user”:req.params.id}).exec();if(!modelData){res.status(204).json({error:“No Data”});return;}res.json(modelData);}我确实有一个小问题。如何比前端的接口模型更好。例如,GET请求如何?类似这样的?
async show(req,res){const modelData=wait modelData.find().where({“user”:req.params.id}).exec();if(!modelData){返回res.status(204).json({错误:“无数据”})}返回res.status(200).send(modelData);}
你几乎是对的:async show(req,res){const modelData=wait modelData.find({“user”:req.params.id}).exec();if(!modelData){res status(204).json({error:“No Data”});return;}res json.json(modelData);}我确实有一个小问题。与前端中的接口模型相比,性能如何。例如。是的,但是如果req.body.personalData[0]。title它将不会除0之外,而是1?您需要使用.map(),正如在数组上的另一个答案或循环中建议的那样。是的,但是如果req.body.personalData[0]会发生什么.title它将不是0而是1?您需要按照数组上另一个答案或循环中的建议使用.map()。