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');
}
}
);
//@route GET api/patients/:patient_id
//@desc Get patient by ID
//@access Private, patient information
router.get('/:patient_id', auth, async (req, res) => {
try {
const patient = await Patient.findById(req.params.patient_id);
if(!patient) {
return res.status(400).json({ msg: "This patient does not exist." });
}
res.json(patient)
}
catch (err) {
console.error(err.message);
if(err.kind == 'ObjectId') {
return res.status(400).json({ msg: 'Patient not found' })
}
res.json(500).send({ msg: 'Server Error in get patient by user ID' })
}
});
//@route PUT api/patients/:patient_id
//@desc Update patient information
//@access Private, patient information
router.put('/:patient_id', async (req,res) => {
try {
let patient = await Patient.findById(req.params.patient_id);
if(patient) {
patient = await Patient.findOneAndUpdate(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
}
);
}
return res.json(patient);
}
catch (err) {
console.error(err.message);
res.status(500).send('Server Error in update patient info')
}
});
我一直在参考该项目的教程,但是在该教程中,创建配置文件路由也更新了配置文件,因为它引用了已登录用户的ID。
当我用邮递员进行测试时,我在要更新的患者的URL中发送Patient_id,并且它在数据库中发回了另一位患者的信息。
如何修改放置请求以更新患者信息?
谢谢!
回答如下:您要么找不到病人,要么更新错误。尝试对更新功能执行.then和.catch,然后查看是否抛出任何错误。