Express-Validator проверяет ответ POST от внешнего API (включая сеанс и запрос)

У меня есть простая форма с именем и электронной почтой.

Я должен отправить эти данные во внешний API (почему я использую запрос).

В форме я использую action="/send" для использования route.post('/send'...

Данные из будут опубликованы, и я верну данные из API (например, ошибка для имени или почты или просто успех), но пользователь также должен / отправить.

Но мне нравится держать пользователя на текущей странице и выдавать ошибки там.

Итак, у меня есть несколько примеров с экспресс-валидатором и экспресс-сессией. Но нет примера того, как использовать валидатор с ответными данными из внешнего API и использовать сообщения из этого API.

Вот что у меня есть на данный момент:

Может быть любая страница

router.get('/:id', function(req, res, next) {
    Request.get("https://cmediaapi.datingpartner.com/content/v3_real/profile/" + req.param("id"), (error, response, data) => {
      if(error) {
          return console.dir(error);
      }
      // console.dir(JSON.parse(data));
      obj = JSON.parse(data);
      // console.dir(obj[1].pseudo);
      res.render('user', {
        title: 'Chat',
        user: obj,
        success: false,
        errors: req.session.errors
      });
      req.session.erros = null;
    });
});

И это send.js

router.post('/', function(req, res, next) {

var dp = '7daz1bba1';
var key = '256e5a83-40b7-4fd0-846b-71f415926957';

console.dir(req.body.pseudo.val);
console.dir(req.body.email.val);

Request.post(
'https://media.datingpartner.com/signup/webmaster.php?dp='+dp+'&app_key='+key+'',
{ form: { user: req.body.pseudo.val, email: req.body.email.val} },
    function (error, response, data) {
    if (!error && response.statusCode == 200) {
        console.dir(data);
        obj = JSON.parse(data);
        console.dir(obj.data);
        console.dir(obj.data.errors);

        if (obj.data.errors) {
            console.log('there is a error');
            var email = obj.data.errors[0];
            console.log(email);
            var msg = email[1];
            console.log(msg);

            req.session.errors = obj.data.errors;
            req.session.success = false;
            // res.send(msg);
        }
        else {
            req.session.success = true;
        }
    } 
    }
);

backURL = req.header('Referer') || '/';
res.redirect(backURL);

})

и моя маленькая пробная форма в PUG/Jade

div#content
    form(action="/send" method="POST")#signup
        input(name="pseudo[val]")
        br
        input(name="email[val]")
        br
        input(type="submit")
    div#results
        if errors
            each error, i in errors
                li #{error.msg}

Было бы здорово, если бы кто-нибудь знал, как обращаться с этими внешними API, чтобы получать ошибки на той же странице без перенаправления пользователя (только после успеха).

Большое спасибо.


person rootfuchs    schedule 01.12.2017    source источник


Ответы (1)


Вместо использования action="/send" попробуйте использовать action="send()" и объявите эту функцию с помощью $.post() из JQuery. Это позволит вам отправить URL-адрес POST / с данными пользователя и вернуть сообщение об успешном завершении или об ошибке без перезагрузки страницы.

Я понимаю, что вопрос был задан в Node и Express, но это проблема на стороне клиента, а не на стороне сервера, поэтому для этого можно использовать Jquery.

person Alejandro Krumkamp    schedule 02.12.2017