您好,我当前的任务是将数据发送到服务器并使用req.params从url读取,但问题是我正在使用ajax,并且无法将表单操作设置为正确发送到特定的url,这会导致路由错误,我认为问题是形式网址 /:token ,但我不知道如何解决该问题。所以我希望你理解,这是代码: (我在index.js中配置了/ forgot-password,所以我不需要将其指向url
FORM:
<form action="/forgot-password/reset/:token" method="POST" id="idform">
<input type="password" name="password" placeholder="New password">
<input type="password" name="confirm_password" placeholder="Confirm password">
<input type="submit" value="Submit">
</form>
AJAX:
<script>
$(document).ready(()=>{
var $form = $('form#idform');
$form.on('submit', (e)=>{
e.preventDefault();
$.ajax({
url: $form.attr('action'),
type: $form.attr('method'),
data: $form.serialize(),
error: (xhr,textStatus,error)=>{
try{
const r = JSON.parse(xhr.responseText);
if(r.message){
$('#err').html(r.message)
}
}catch(error){
$('#err').html(xhr.responseText)
}
},
success: (res)=>{
window.location.replace(res.r)
}
})
})
})
</script>
NodeJS:
router.post('/reset/:token', (req,res)=>{
async.waterfall([
(done)=>{
User.findOne({resetPasswordToken: req.params.token, resetPasswordExpirationDate: {$gt: Date.now()} }, (err,user)=>{
if(err){
return res.status(500).send({message: err.message})
}
console.log(user)
})
}
])
})
如果找到解决方案,谢谢您
答案 0 :(得分:0)
您需要执行此操作,通过ajax发送数据时无需在此处进行操作
<form method="POST" id="idform" data-token="your-token">
<input type="password" name="password" placeholder="New password">
<input type="password" name="confirm_password" placeholder="Confirm password">
<input type="submit" value="Submit">
</form>
现在使用js
$(document).ready(()=>{
var $form = $('form#idform');
$form.on('submit', (e)=>{
e.preventDefault();
$.ajax({
url:'/forgot-password/reset/'+ $('idform').data('token'),
type: $form.attr('method'),
data: $form.serialize(),
error: (xhr,textStatus,error)=>{
try{
const r = JSON.parse(xhr.responseText);
if(r.message){
$('#err').html(r.message)
}
}catch(error){
$('#err').html(xhr.responseText)
}
},
success: (res)=>{
window.location.replace(res.r)
}
})
})
})
让我知道是否需要更多帮助
答案 1 :(得分:0)
您需要一个模板引擎(例如ejs)并将令牌作为变量传递。并在您的路线中使用正确的路径