我已经使用 MERN Stack 创建了一个外出审批系统,我已经实现了以下代码以将 LeaveStatus 设置为“已批准”,但刷新页面后更改不会保留。通过邮递员请求 PATCH 没有问题。
Mongoose 模式离开状态片段
leaveStatus : { type : String, default : 'Not Approved', enum : [ 'Approved', 'Not Approved'] }
前端外出审批功能片段:
`constapproveOuting=async()=>{ const response = wait fetch('api/outings/' + outing._id, { 方法:“补丁” })
if (response.ok) {
const json = await response.json()
var updatedJson = {...json, leaveStatus : "Approved"}
dispatch({type: 'PATCH_OUTING', payload: updatedJson})
}
}`
郊游减速器片段:
`案例'PATCH_OUTING': // 查找要更新的郊游索引 const outingIndex = state.outings.findIndex((outing) => outing._id === action.payload._id);
// Create a copy of the outings array with the updated outing
const updatedOutings = [...state.outings];
updatedOutings[outingIndex] = action.payload;
return {
outings: updatedOutings
};`
我创建了一个临时变量来保存当前的 json 并编辑 leftStatus 以批准并将其作为我的有效负载发送。
您需要在后端实现一个处理 PATCH 请求的路由。此路线应更新 MongoDB 数据库中的
leaveStatus
字段。在您的后端代码中,您可能有类似的内容:
// Import necessary modules
const express = require('express');
const router = express.Router();
const Outing = require('../models/outing'); // Import your Mongoose model
// Define the PATCH route for updating outing leaveStatus
router.patch('/outings/:id', async (req, res) => {
try {
const outing = await Outing.findByIdAndUpdate(
req.params.id,
{ leaveStatus: 'Approved' }, // Update the leaveStatus to 'Approved'
{ new: true } // Return the updated document
);
if (!outing) {
return res.status(404).json({ message: 'Outing not found' });
}
res.json(outing); // Return the updated outing
} catch (error) {
console.error(error);
res.status(500).json({ message: 'Server Error' });
}
});
module.exports = router;