【问题标题】:How to pass data between express routes?如何在快速路线之间传递数据?
【发布时间】:2018-08-16 18:53:21
【问题描述】:

我在 POST 路由中进行 API 调用,但由于某种原因,我无法通过 res.renderPOST 路由中传递 JSON 数据。所以我正在考虑将 JSON 对象传递给 GET 路由,以便将 render 传递给正确的客户端页面。

这是我的 GETPOST 路线:

router.get('/bookDetails', (req, res) => {
     res.render('bookDetails');
});

router.post('/bookDetails', (req, res) => {
     let ID = req.body.ID;
     request('https://www.googleapis.com/books/v1/volumes/' + ID, (err, response, body) => {
     if(!err && response.statusCode == 200){
       let bookdata = JSON.parse(body);
       res.render('bookDetails', {bookdata: bookdata});
    }else{
      console.log(err);
    }
  });
});

我无法读取 bookDetails.ejs 文件中的书籍数据?有没有其他方法将这些数据传递到页面?

【问题讨论】:

  • 你能做一个 console.log(body) 看看你从请求调用中得到了什么吗?通常有效载荷应该是响应。
  • @VitoMadio 我正在取回我想要的 JSON 对象,但我尝试在我的 ejs 文件中渲染它说它未定义。
  • 好吧,如果你收到一个 json 对象,你不需要解析它,所以试试: let bookdata = body;而是希望它有所帮助。
  • @RockySingh 你能告诉我们你是如何在ejs文件中访问bookdata的吗?
  • @SridharI 解决了这个问题。还是谢谢

标签: javascript node.js express ejs


【解决方案1】:

在语义上,它应该是一个 GET 路由器来显示一些关于 ID 资源的内容。

router.get('/bookDetails/:id', (req, res) => {
   let resource = await fetchResourceById
   res.render('bookDetails', resource);
});

另外,您可以定义一个中间件函数来重用 fetchResource 逻辑,如下所示:

function fetchResourceMiddleware(){
  return function(req, res, next){
    var id = req.query.id || req.body.id
    if(id){
      req.resource = await fetchResource(id)
    }
    next()
  }
}

重用 GET 和 POST 路由器的中间件功能:

function renderResource(req, res){
  res.render('bookDetails', req.resource);
}

router.get('/bookDetails/:id', fetchResourceMiddleware(), renderResource)
router.post('/bookDetails', fetchResourceMiddleware(), renderResource)

希望有帮助,祝你好运!

【讨论】:

    【解决方案2】:

    发布后,您的 get 方法将运行。 在 get 方法中,您没有向 ejs 模板发送任何数据,因此它不会检测到它。 你应该在 post 方法中重定向,有时这是个坏主意,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 2019-02-20
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多