尝试在 node.js 中发出 PUT 请求
Trying to make a PUT request in node.js
我正在尝试使用 Javascript 通过 node.js 发出 PUT 请求。基本上,我要做的是让经过身份验证的用户可以更新 phone 号码和密码。通常我会只使用 req.body
以便使用正文来发出更新请求,但是整个正文都有 username
、password
和 phoneNumber
。我只需要更新密码和 phone 号码。我有一个 restrict 函数限制此请求,除了已登录的注册用户,我还有一个更新模型函数,它是:
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
但我需要在函数中同时使用 phone 号码和密码。这是我开始编写代码的示例:
router.put("/:id/updateaccount", restrict(), async(req, res, next) => {
try {
const {phoneNumber, password} = req.body
} catch(err) {
next(err)
}
})
我在 class 中找到某人的帮助后弄明白了。 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加密了新更新的密码
我正在尝试使用 Javascript 通过 node.js 发出 PUT 请求。基本上,我要做的是让经过身份验证的用户可以更新 phone 号码和密码。通常我会只使用 req.body
以便使用正文来发出更新请求,但是整个正文都有 username
、password
和 phoneNumber
。我只需要更新密码和 phone 号码。我有一个 restrict 函数限制此请求,除了已登录的注册用户,我还有一个更新模型函数,它是:
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
但我需要在函数中同时使用 phone 号码和密码。这是我开始编写代码的示例:
router.put("/:id/updateaccount", restrict(), async(req, res, next) => {
try {
const {phoneNumber, password} = req.body
} catch(err) {
next(err)
}
})
我在 class 中找到某人的帮助后弄明白了。 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加密了新更新的密码