gpt4 book ai didi

javascript - 如何使用 Node.js 和 Express 从 URL 获取值?

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:46 25 4
gpt4 key购买 nike

我正在尝试从以下 URL http://localhost:3000/users/reset/e3b40d3e3550b35bc916a361d8487aefa30147c8 获取 token 值。我有一个获取请求,用于检查 token 是否有效并将用户重定向到重置密码屏幕。我也有一个发布请求,但当我控制台 req.params.token 时,它输出 :token 而不是 e3b40d3e3550b35bc916a361d8487aefa30147c8。我想知道表单操作是否正确,但不知道如何从中获取 token 值。

重置密码获取请求

router.get('/reset/:token', (req, res) => {
console.log(req.params.token) // e3b40d3e3550b35bc916a361d8487aefa30147c8
User.findOne({
resetPasswordToken: req.params.token,
resetPasswordExpires: {
$gt: Date.now()
}
}, (err, user) => {
if (!user) {
req.flash('error_msg', 'The password reset token is invalid or has expired.')
return res.redirect('/users/forgot')
}
res.render('reset')
})
})

reset.ejs

<% include ./partials/messages %>
<form action="/users/reset/:token" method="POST">
<div class="form-group">
<label for="password">Password</label>
<input type="password" id="password" name="password" class="form-control" placeholder="Please enter a password."
value="<%= typeof password != 'undefined' ? password : '' %>" />
</div>
<button type="submit" class="btn btn-primary btn-block">Register</button>
</form>

重置密码发布请求

router.post('/reset/:token', (req, res) => {
console.log(req.params.token) // :token
User.findOne({
resetPasswordToken: req.params.token,
resetPasswordExpires: {
$gt: Date.now()
}
}, (err, user) => {
if (!user) {
req.flash('error_msg', 'The password reset token is invalid or has expired.')
return res.redirect('/users/forgot')
}

user.password = req.body.password;
user.resetPasswordToken = undefined;
user.resetPasswordExpires = undefined;

user.save(function (err) {
req.flash('success_msg', 'Working.')
return res.redirect('/users/login')
})
})
})

最佳答案

在 HTML 表单中,您有以下内容:

<form action="/users/reset/:token" method="POST">

这将使发布表单时请求的实际 URL 为:

/users/reset/:token

此处没有代码对 :token 进行任何替换。这只是作为 URL 直接发送到服务器。

所以,当你有:

router.post('/reset/:token', (req, res) => {
console.log(req.url); // "/user/reset/:token"
console.log(req.params.token); // ":token"
});

req.params.token 向您显示的是 /users/reset 之后的 URL 中的内容。在您的情况下,这是文字字符串 ":token"。为了让 req.params.token 实际上必须在其中添加 token ,您必须将实际 token 插入到 URL 中,以便您的表单标记如下所示:

<form action="/users/reset/e3b40d3e3550b35bc916a361d8487aefa30147c8" method="POST">

或者,您必须以其他方式访问 token ,例如从快速 session 、从 cookie、从表单中的字段等...

关于javascript - 如何使用 Node.js 和 Express 从 URL 获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54499686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com