findOneAndUpdate猫鼬;将标头发送到客户端后无法设置标头

时间:2019-05-19 16:43:32

标签: node.js mongodb express mongoose

创建记录后,我试图使用$ push发送刚刚创建到其他模型中的记录的ID。

likeRoutes.route('/add').post(function(req, res){
    let like = new Like({
        value: req.body.value,
        _report: req.body._report
    })
    like.save((err, doc) => {
        if (err)
            res.send(err)
            console.log('in router - card id', req.body._report)
            console.log('doc id', doc)
        Report.findOneAndUpdate({ _id: req.body._report },
            { $push: { like: doc._id } },
            { new: true , useFindAndModify: false },
            (err, post) => {
                if (err)
                    res.send(err)
                    res.json({doc})
            }
        )
    })
})

运行此命令时,我不断收到Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 的错误

我以前曾这样配置它:

Report.findOneAndUpdate({ _id: req.body._report },

它每次都在相同的报告中添加喜欢的记录,而没有按ID查找。

1 个答案:

答案 0 :(得分:0)

您不能一个接一个地打电话给res.sendres.json

尝试一下:

likeRoutes.route('/add').post(function(req, res){
    let like = new Like({
        value: req.body.value,
        _report: req.body._report
    })
    like.save((err, doc) => {
        if (err) return res.send(err)

        console.log('in router - card id', req.body._report);
        console.log('doc id', doc);

        Report.findOneAndUpdate({ _id: req.body._report },
            { $push: { like: doc._id } },
            { new: true , useFindAndModify: false },
            (err, post) => {
                if (err) return res.send(err);

                res.json({doc})
            }
        )
    })
})

现在,如果发生错误,您将停止执行并返回错误。如果没有错误-您正在发送结果。