【问题标题】:Node.js POST request send array of objects not only ObjectNode.js POST 请求不仅发送对象数组,还发送对象
【发布时间】:2020-08-12 03:43:04
【问题描述】:

正如您在图片中看到的那样,它什么也没保存。 POST 请求正在工作,但我发送到后端的数据只保存带有 ID 的新对象,而不是我提供的数据,我的意思是对象数组。

我没有任何错误或状态正常。我正在用 Postman 进行测试。 这是邮递员发帖请求

我会添加一些代码。

这是模型。

    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});
        });
    },

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

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

    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 请求会怎样?像这样的东西? async show(req, res) { const modelData = await ModelData.find().where({"user": req.params.id}).exec(); if (!modelData) { return res.status(204).json({error: "No Data"}); } return res.status(200).send(modelData); }
    • 你几乎是对的:async show(req, res) { const modelData = await ModelData.find({"user": req.params.id}).exec(); if (!modelData) { res.status(204).json({error: "No Data"});返回; } res.json(模型数据); }
    • 我有一个小问题。比前端的接口模型怎么样。例如。
    【解决方案2】:

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

      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
            }],
    

    `

    【讨论】:

    • 是的,但是如果 req.body.personalData[0].title 不是 0 而是 1 会发生什么?
    • 您需要按照另一个答案中的建议使用 .map() 或遍历您的数组。
    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2017-05-19
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多