尝试在node.js中提出PUT请求

问题描述

我正在尝试使用Javascript向node.js发出PUT请求。基本上,我要尝试做的就是使经过身份验证的用户更新电话号码和密码。通常,我会使用req.body来使主体用于发出更新请求,但是整个主体具有usernamepasswordphoneNumber。我只需要更新密码和phoneNumber。除了已登录注册用户外,我还有一个限制此请求的限制功能,并且我还有一个用于更新的模型功能

function updateUser(changes,id) {
    return db("users")
    .update(changes)
    .where({id})
}

我还试图确保用户决定更新的密码(或他们当前拥有的密码)是哈希值。我正在使用bcryptjs哈希密码。我有两个发布请求,两个请求都对密码进行加密(这是我的注册功能),并且比较了加密(我的登录功能)。如果您需要任何背景信息,我都会将它们都包括在内:

router.post("/register",async (req,res,next) => {
    try {
        const {username,password,phoneNumber} = req.body
        const user = await Users.findBy({username}).first()

        if(user) {
            return res.status(409).json({
                message: "Username is already in use",})
        }
        const newUser = await Users.create({
            username,password: await bcrypt.hash(password,14),phoneNumber,})

        res.status(201).json(newUser)
    } catch (err) {
        next(err)
    }
})


router.post("/login",async(req,password} = req.body
        const user = await Users.findBy({username}).first()
        
        if(!user) {
            return res.status(401).json({message: "Invalid Username or Password",})
        }

        const passwordValid = await bcrypt.compare(password,user.password)

        if(!passwordValid) {
            return res.status(401).json({message: "Invalid Username or Password",})
        }
        
        const token = jwt.sign({
            userId: user.id,},process.env.JWT_SECRET)
        

        res.cookie("token",token)

        res.json({
            message: `Welcome to your plant page ${user.username}!`
        })
    } catch (err) {
        next(err)
    }
});

当我尝试启动我的PUT请求时,我开始写const {phoneNumber,password} = req.body,但是我需要在函数中同时使用phoneNumber和password。这是我开始使用代码的示例:

router.put("/:id/updateaccount",restrict(),next) => {
    try {
        const {phoneNumber,password} = req.body
    } catch(err) {
        next(err)
    }
}) 

解决方法

我在班上某人的帮助下找到了答案。 const {phoneNumber,password} = req.body使我步入正轨。剩下的就是这个(或者这就是全部代码):

router.put("/:id/updateaccount",restrict(),async(req,res,next) => {
    try {
        const {phoneNumber,password} = req.body
        const userUpdate = await Users.updateUser({
          phoneNumber,password: await bcrypt.hash(password,14)
         },req.params.id)
        
        res.status(200).json({
        userUpdate:userUpdate,message: "You have successfully updated your information",})
    } catch(err) {
        next(err)
    }
}) 

我再次使用bcrypt加密新更新的密码