为什么我在使用mongoose更新时得到一个空字符串?

6uxekuva  于 2022-11-13  发布在  Go
关注(0)|答案(1)|浏览(132)

所以我尝试更新特定信息并留下其他信息。但现在的情况是我仍然应该输入其他信息,否则它将是一个空的。这是我发送信息后收到的信息:

"studentId": "",

因此,在本例中,管理员可以更改studentId信息,但我现在只想更改状态。(反之亦然)
这是我的前端。我把它存储到状态,

const [data,setData] = useState({
    studentId: '',
    status: ''
  })

  const handleClick = async (e) => {
    e.preventDefault() 
    try {
       await userRequest.put(`/users/${userId}`,data)
    } catch (error) {
      console.log({error: error.message})
    }
  }

<div className="formInput">
    <label>Student ID</label>
    <input type="text" placeholder={userInfo.studentId}  onChange={(e) => 
         setData({...data, studentId: e.target.value})} />
 </div>

<div className="formInput">
   <FormControl sx={{ m: 1, minWidth: 200 }}>
     <InputLabel id="demo-simple-select-helper-label">Status</InputLabel>
       <Select
         labelId="demo-simple-select-helper-label"
         id="demo-simple-select-helper"
         defaultValue={userInfo.status}
         label="Status"
          onChange={(e) => setData({...data, status: e.target.value})}
          >
            <MenuItem value="">
              <em>None</em>
              </MenuItem>
               <MenuItem value="pending">Pending</MenuItem>
               <MenuItem value="active">Active</MenuItem>
                <MenuItem value="disable">Disable</MenuItem>
                     </Select>
                </FormControl>

                </div>

Backend.js

router.put('/:id',  async (req,res) =>{
    if(req.body.password){
        req.body.password = CryptoJS.AES.encrypt(
            req.body.password, 
            process.env.PASSWORD_SEC)
            .toString();
    }

    try {
        const updatedUser = await User.findByIdAndUpdate(req.params.id, {
            $set: req.body
        }, {new: true})
        res.status(200).json(updatedUser)
        console.log(updatedUser)
    } catch (error) {
       res.status(500).json({message:error.message})
    }
})
ahy6op9u

ahy6op9u1#

我不知道这是不是一个好的方法,但我改变了这一点

const [data,setData] = useState({})

像这样改变手柄

onChange={(e) => setData({...data, [e.target.name]: e.target.value})}

相关问题