【问题标题】:Node.js Problem redirecting routine post methodNode.js问题重定向例程发布方法
【发布时间】:2020-01-20 15:20:55
【问题描述】:

我写在这里是为了谁能帮助我,因为我是NodeJS的新手,我正在尝试做一些简单的事情,但最终它对我不起作用。

我想从前端通过 ajax post 方法向后端发出请求。执行时,从前端发送一个 JSON 对象到后端,然后从后端它必须重定向到另一个页面到前端(后者是我无法实现的)

我尝试的示例

前端

     var objAgente = {
          "FIRSTNAME": "PEDRO",
          "LASTNAME": "PEREZ",
          "NRORUT": "123456789",
          "NROAGENT": "3",
          "HRCONNECT": "12:12:12"
     };

     $.ajax({
          type: 'POST',
          url: '/LoginAgente',
          data: JSON.stringify({ "objectData": objAgente}),
          success: function(data) {console.log('todo OK')},
          contentType: "application/json",
          dataType: 'json'
     });

后端

     const express = require("express");
     const router = express.Router();

     router.use(express.json())
     router.use(express.urlencoded({ extended: true }))

     router.get('/', (req, res)=>{
          res.render('loading.html', { title: 'Iniciando Sistema'});
     });

     router.get('/Inicio', (req,res)=>{
          res.render('confInitial.html', { title: 'Inicio de Sistema'});
     });

     router.get('/Agente', (req,res)=>{
          res.render('PanelAgente/Agente.html', { title: 'Equipo solo Agente'});
     });

     router.post('/LoginAgente', function (req, res) {
          var newUser = req.body;
          console.log(newUser);
          res.redirect('/Agente');
     });

     module.exports = router;

当我执行将JSON对象发送到后端时,数据到达,因为我可以通过控制台打印它,但是res.redirect没有实现;

它不会返回错误,但不会将我重定向到我想要的位置。

非常感谢那些可以让我了解发生了什么的人

【问题讨论】:

    标签: node.js express post


    【解决方案1】:

    代替

    res.redirect('/Agente');

    试试

    res.send({redirect: '/Agente'});

    更新:

    前端

     var objAgente = {
          "FIRSTNAME": "PEDRO",
          "LASTNAME": "PEREZ",
          "NRORUT": "123456789",
          "NROAGENT": "3",
          "HRCONNECT": "12:12:12"
     };
    
     $.ajax({
          type: 'POST',
          url: '/LoginAgente',
          data: JSON.stringify({ "objectData": objAgente}),
          success: function(data) {
            if (data && data.redirect) {
              window.location.href = data.redirect;
            }
          },
          contentType: "application/json",
          dataType: 'json'
     });
    

    希望这会有所帮助!

    【讨论】:

    • 嗨,David R,我按照您的指示放置,但什么也没发生。您还有其他建议吗?
    • @MiguelEduardoRangelGomez 还需要更改前端代码:window.location.href = data.redirect
    【解决方案2】:

    当您使用 AJAX 发送请求时,服务器无法重定向到 AJAX 请求中的其他页面,您必须在收到 AJAX 响应后重定向用户

     $.ajax({
          type: 'POST',
          url: '/LoginAgente',
          data: JSON.stringify({ "objectData": objAgente}),
          success: function(data, textStatus, request){
    
             // add redirect link here 
             window.location.href = '/add_link_to_redirect_here';
    
          },
          contentType: "application/json",
          dataType: 'json'
     });
    

    【讨论】:

    • 不幸地质疑作者使用 SO 导师来实现他的目标,而自己却不做任何事情
    • @num8er 如果我是专家,也许我会更多地帮助或澄清 [Saurabh Mistry] 是如何以如此简单的方式做到这一点的,以至于它诽谤了人们。同样,非常感谢您的时间和帮助。
    • @MiguelEduardoRangelGomez 真的请花点时间看看这些:youtu.be/L72fhGm1tfEyoutu.be/wI1CWzNtE-Myoutu.be/eR3rcalj06Q
    【解决方案3】:

    无需更改后端代码,因为它可能在将来需要非 ajax 身份验证时有用。

    所以只需尝试从响应中获取Location 标头并使用window.location.href 进行重定向

    前端

    var objAgente = {
          "FIRSTNAME": "PEDRO",
          "LASTNAME": "PEREZ",
          "NRORUT": "123456789",
          "NROAGENT": "3",
          "HRCONNECT": "12:12:12"
     };
    
     $.ajax({
          type: 'POST',
          url: '/LoginAgente',
          data: JSON.stringify({ "objectData": objAgente}),
          success: function(data, textStatus, request){
            const redirectTo = request.getResponseHeader('Location');
            if (redirectTo) {
              window.location.href = redirectTo;
            }
          },
          contentType: "application/json",
          dataType: 'json'
     });

    【讨论】:

    • 你好 num8er,我碰巧想从这里重定向。 router.post('/LoginAgente', function (req, res) { //一些对BD的操作和查询然后res.redirect('/Agente'); });因为,在 post 方法中,我将执行一些查询并最终组合一个 JSON 以将其返回到我将重定向的页面
    • @MiguelEduardoRangelGomez 您不能同时使用重定向和 json 正文进行响应。这是不正确的。如果您想回复 json,请查看 David 的回答并执行此操作。
    • 我非常感谢有兴趣帮助我。您向我指示的重定向方式是正确的并且有效,但除了重定向之外......我需要传递 URL 以外的某些变量。我想通过 EJS 模板引擎从后端发送这些变量。我还能怎么做?
    【解决方案4】:

    我想如果你想使用并查看整个身体

    var newUser = req.body;
    console.log(newUser);
    

    你应该在你的前面传递这样的对象:

    data: JSON.stringify(objAgente)
    

    然后做你正在做的事情:

    req.body
    

    因为如果你将你的对象传递给一个新对象,他会明白你将在 obj 中访问这些属性,例如:

    req.body.objectData.FIRSTNAME
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多