将数据发送到服务器以获取req.params

时间:2019-01-26 18:35:49

标签: node.js express routing

您好,我当前的任务是将数据发送到服务器并使用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)





                })
        }
    ])
})

如果找到解决方案,谢谢您

2 个答案:

答案 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)并将令牌作为变量传递。并在您的路线中使用正确的路径