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

我正在尝试使用 Javascript 通过 node.js 发出 PUT 请求。基本上,我要做的是让经过身份验证的用户可以更新电话号码和密码。通常我只是req.body为了让正文被用来发出更新请求而使用,但是整个正文都有一个username,passwordphoneNumber。我只需要更新密码和电话号码。除了已登录的注册用户,我有一个限制此请求的限制功能,而且我还有一个更新模型功能,它是:

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, res, next) => {

    try {

        const {username, 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)

    }

});



噜噜哒
浏览 210回答 1
1回答

慕森王

在找到班上某人的帮助后,我弄明白了。我在正确的轨道上使用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 来加密新更新的密码
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript