如何在快递路线之间传递数据?

时间:2018-08-16 18:53:21

标签: javascript node.js express ejs

我正在通过POST路由进行API调用,但是由于某些原因,我无法通过JSON路由res.render传递POST数据。因此,我正在考虑将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文件中的图书数据?有没有其他方法可以将此数据传递给页面?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

希望有帮助,祝您好运!