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



我正在尝试使用Javascript对node.js进行PUT请求。基本上,我想做的是让经过身份验证的用户可以更新电话号码和密码。通常,我只会使用req.body来让主体用于进行更新请求,但整个主体有usernamepasswordphoneNumber。我只需要更新密码和电话号码。我有一个限制功能,除了登录的注册用户之外,它限制了这个请求,我还有一个更新的模型功能,它是:

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

我还试图确保用户决定更新的密码(或他们目前拥有的密码(经过哈希处理。我正在使用bcryptjs对密码进行哈希。我有一个两个post请求,既加密密码(这是我的注册功能(,又比较加密(我的登录功能(。我将包括这两个,以防你需要任何背景信息:

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)
}
});

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

router.put("/:id/updateaccount", restrict(), async(req, res, 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加密新更新的密码

最新更新