首页 > 解决方案 > 如何在快速路线之间传递数据?

问题描述

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

这是我的GET路线POST

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 文件中的 bookdata?是否有另一种方法将这些数据传递到页面?

标签: javascriptnode.jsexpressejs

解决方案


在语义上,它应该是一个 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)

希望有帮助,祝你好运!


推荐阅读