首页 > 解决方案 > 快速重定向但不显示任何数据?

问题描述

我有这个路由器设置:

router.get('/', (req, res)=>{
    // Get posts data
    db.query("select * from PostSchema", (err, results)=>{
      if(err){
        return res.status(500).end(err.message);
      }
      else{
          res.render('admin/posts', {
            results: results
          });
      }
    });
});

输出将来自 MySQL 的数据显示到我的车把页面上。到目前为止,一切都很好。

我有另一个发布数据的路由器:

// Post data
router.post('/create', (req, res)=>{

  var {title, status, allowComments, body} = req.body;

  // Execute query
  db.query("INSERT INTO PostSchema (title, status, comments, body) values (?, ?, ?, ?)", [title, status, allowComments, body],(err, results)=>{
    if(err){
      return err;
    }
    else{
      console.log('Post Created!');
      res.render('admin/posts'); // This redirects but does not show any data
    }
  });
});

问题

在我的第一个路由器中 -redirects我要'admin/posts'使用results车把中显示的数据。

但是,我对post路由器做同样的事情 -redirects我要'admin/posts'. 但它没有显示任何数据,因为我没有通过results

问题

我加载数据的唯一选择是

标签: node.jsexpress

解决方案


您没有重定向到代码中的任何地方,您所做的只是发回一些呈现的 html。

不同之处在于您实际上可以执行重定向,而不仅仅是在POST /create处理程序中发回 html。

当您将重定向响应发送回客户端时(/在您的情况下重定向到)。客户端将向该位置生成另一个请求,并且您的数据将正确呈现,而无需将任何代码复制到POST /create处理程序。

像这样res.redirect在你的处理程序中使用。POST /create

// Post data
router.post('/create', (req, res)=>{

  var {title, status, allowComments, body} = req.body;

  // Execute query
  db.query("INSERT INTO PostSchema (title, status, comments, body) values (?, ?, ?, ?)", [title, status, allowComments, body],(err, results)=>{
    if(err){
      return err;
    }
    else{
      console.log('Post Created!');
      res.redirect(303, '/'); 
    }
  });
});

另请注意,如果您的处理程序中有错误POST /create,请求将挂起,因为您没有将任何内容发送回客户端(您只是从函数返回)

if(err){
   return err;
}

推荐阅读