提问者:小点点

快速重定向但不显示任何数据?


我设置了此路由器:

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中的数据显示到handlebars页面上。 到目前为止还不错。

我还有另一台路由器可以发布数据:

// 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
    }
  });
});

问题

在我的第一台路由器中,它我重定向到'admin/posts',并在手柄中显示results数据。

但是,我使用post路由器也是这样做的-它我重定向到'admin/posts'。 但它没有显示任何数据,因为我没有传递results

问题

加载数据的唯一选择是

  • 是否需要从第一个路由器复制所有代码并将其粘贴到POST路由器中的else语句中?

共1个答案

匿名用户

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

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

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

post/create处理程序中使用res.redirection,如下所示。

// 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;
}