如何在 mern 堆栈中发布对特定数组字段的请求

Posted

技术标签:

【中文标题】如何在 mern 堆栈中发布对特定数组字段的请求【英文标题】:How to post request for a particular field of array in mern stack 【发布时间】:2021-12-09 08:13:30 【问题描述】:

代码没有在答案数组中添加答案......请解释如何编写正确的方法来实现它? 'id' 是问题,用于参数。

架构:

const QuestionSchema = new mongoose.Schema(
    qtitle:
        type:String,
        required:true
    ,
    descofq:
        type:String,
        required:true
    ,
    pic:
        type:String,
        default:"no photo"
    ,
    answers:[
        
            answer:
                type:String,
                required:false
            ,
            picofa:
                type:String,
                default:"no photo"
            ,
            postedBy:
                type:mongoose.Schema.Types.ObjectId,
                ref:"USER"
            
        
    ]
    
)

POST 请求:

router.post('/answer/:id',authenticate,(req,res)=>
    Question.findById(req.params.id).then(question=>
        question.answers.answer = req.body.answer;
        question.save().then(result=>
            res.json(result)
        ).catch(err=>
            res.status(400).send(err);
        )
    ).catch(err=>
        res.status(200).send(err);
    )
)

我也试过 question.answers.answer.push(answer); 括号中的答案将从 req.body 获取,但这也不起作用。

【问题讨论】:

【参考方案1】:

您的答案是一个数组。您不能将值设置为对象。 如果要将对象添加到数组中。让我们使用推送功能。

例如: question.answers.push( answer: req.body.answer, postedBy: “userId” ); 问题.save()

【讨论】:

用过但没用 你必须添加一个对象。因为在架构中您定义的答案是嵌套字段。您不能将字符串推送到它【参考方案2】:

Answers 字段是一个数组,您应该指定哪个答案 里面的答案数组

router.post('/answer/:id',authenticate,(req,res)=>
    Question.findById(req.params.id).then(question=>
        question.answers.push(req.body.answers);
        question.save().then(result=>
            res.json(result)
        ).catch(err=>
            res.status(400).send(err);
        )
    ).catch(err=>
        res.status(200).send(err);
    )
)

Example: req.body.answers = answer: "bla bla..", picofa: "bla bla", postedBy: userId

另一种解决方案:

router.post('/answer/:id',authenticate,(req,res)=>
    Question.findById(req.params.id).then(question=>
        question.answers[0].answer = req.body.answer;
        question.save().then(result=>
            res.json(result)
        ).catch(err=>
            res.status(400).send(err);
        )
    ).catch(err=>
        res.status(200).send(err);
    )
)

【讨论】:

你能解释一下示例部分吗,比如我应该在哪里写,我应用了它但它不起作用 这里的例子是关于你应该从客户端发送的请求(如邮递员)

以上是关于如何在 mern 堆栈中发布对特定数组字段的请求的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据附加到 MERN 堆栈中 mongodb 中的现有数组

如何在 mern 堆栈中获取注册表单的国家/地区列表?

如何解决这个 MERN 堆栈 filebase64 错误?

MERN API 请求,不知道如何发出 put 请求并正确更新

MERN 堆栈中的 CSRF 实现

如何使用GraphQL在MERN应用程序的MongoDB模式中插入数组字段?