PUT 请求无法使用 MongoDB、Node 和 Express 更新条目的问题

在这种情况下,使用 MERN 堆栈并无法获取 PUT 请求以更新患者信息。


患者路线-patient.js


//@route   POST api/patients

//@desc    Create patient profile

//@access  Private, patient information

router.post('/', [ auth,

    check('firstName', 'First Name is required')

        .not()

        .isEmpty(),

    check('lastName', 'Last name is required')

        .not()

        .isEmpty(),

    check('medicalConditions', 'Medical Conditions are required')

        .not()

        .isEmpty()

    ], 

    async (req, res) => {

        const errors = validationResult(req);

        if(!errors.isEmpty()) {

            return res.status(400).json({ errors: errors.array() });

        }


        const {

            firstName,

            lastName,

            dateOfBirth,

            phoneNumber,

            email,

            medicalConditions

        } = req.body


        //Build patient object

        const patientFields = {}

        if(firstName) patientFields.firstName = firstName;

        if(lastName) patientFields.lastName = lastName;

        if(dateOfBirth) patientFields.dateOfBirth = dateOfBirth;

        if(phoneNumber) patientFields.phoneNumber = phoneNumber;

        if(email) patientFields.email = email;

        if(medicalConditions) {

            patientFields.medicalConditions = medicalConditions.split(',').map(medicalCondition => medicalCondition.trim());

        }


        try {

            patient = new Patient(patientFields);

            await patient.save();

            res.json(patient)

        } 

        catch (err) {

            console.error(err.message);

            res.status(500).send('Server Error in Create/Update Patient');

        }

    }

);


我一直在参考这个项目的教程,但在教程中,创建配置文件路由也更新了配置文件,因为它引用了登录用户的 ID。


当我用 Postman 测试这个时,我在我想要更新的患者的 url 中发送 Patient_id,它正在发送回数据库中不同患者的信息。


如何修改 put 请求以更新患者信息?


侃侃无极
浏览 122回答 2
2回答

慕标5832272

mongoosefindOneAndUpdate 返回原始文档,如果要返回更新的文档,则需要在选项中传递 { new: true} 。https://mongoosejs.com/docs/api.html#model_Model.findOneAndUpdate您的查询参数也必须是这样的: {_id:req.params.patient_id}所以你的放置路线必须是:router.put("/:patient_id", async (req, res) => {  try {    let patient = await Patient.findById(req.params.patient_id);    if (patient) {      patient = await Patient.findOneAndUpdate(        { _id: req.params.patient_id },        {          firstName: req.body.firstName,          lastName: req.body.lastName,          dateOfBirth: req.body.dateOfBirth,          phoneNumber: req.body.phoneNumber,          email: req.body.email,          medicalConditions: req.body.medicalConditions        },        { new: true }      );    }    return res.json(patient);  } catch (err) {    console.error(err.message);    res.status(500).send("Server Error in update patient info");  }});另一种解决方案是使用findByIdAndUpdate更短的。如果没有找到文档,返回 400-Bad 请求(或 404 未找到)也是一个好习惯。(正如您在获取路线中所做的那样)router.put("/:patient_id", async (req, res) => {  try {    let patient = await Patient.findByIdAndUpdate(      req.params.patient_id,      {        firstName: req.body.firstName,        lastName: req.body.lastName,        dateOfBirth: req.body.dateOfBirth,        phoneNumber: req.body.phoneNumber,        email: req.body.email,        medicalConditions: req.body.medicalConditions      },      { new: true }    );    if (!patient) {      return res.status(400).json({ msg: "This patient does not exist." });    }    return res.json(patient);  } catch (err) {    console.error(err.message);    res.status(500).send("Server Error in update patient info");  }});

holdtom

您要么永远找不到患者,要么更新时出错。尝试对您的更新函数执行 .then 和 .catch 并查看抛出的任何错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript