отправить данные на сервер для получения req.params - PullRequest
0 голосов
/ 26 января 2019

Здравствуйте, моя текущая задача - отправить данные на сервер и прочитать из URL с помощью req.params, но проблема в том, что я использую ajax и не могу настроить действие формы для правильной отправки на определенный URL, и это вызывает ошибку маршрутизации. в форме URL /: токен , но я не знаю, как решить эту проблему. так что я хотел бы, чтобы вы поняли, вот код: (У меня есть конфигурация для / Forgot-Password в index.js, поэтому мне не нужно указывать его в URL

ФОРМА:

<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 голосов
/ 27 января 2019

Вам нужен шаблонизатор (например, ejs) и передайте токен как переменную.И используйте правильный путь в вашем маршруте

0 голосов
/ 26 января 2019

Вам нужно сделать это, нет необходимости размещать действие здесь, когда вы отправляете данные через 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)
        }
    })
 })
})

Дайте мне знать, если вам нужна дополнительная помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...