Express-Validator检查来自外部API的POST响应(包括会话和请求)

时间:2017-12-01 21:16:10

标签: json node.js express express-session express-validator

我有一个简单的表格,上面有姓名和电子邮件。

我必须将这些数据发送到外部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以在同一页面上获取错误而不重定向用户(仅在成功之后),那将是非常棒的。

非常感谢。

1 个答案:

答案 0 :(得分:0)

使用action="/send"时,请尝试使用action="send()"并使用Jquery中的$.post()声明此函数。 这样您就可以使用用户数据点击 POST / 并返回成功或错误消息,而无需重新加载页面。

我知道问题是在Node和Express下提出的,但这是一个客户端问题,而不是后端问题,因此使用Jquery可以用于此。