我正在通过POST
路由进行API调用,但是由于某些原因,我无法通过JSON
路由res.render
传递POST
数据。因此,我正在考虑将JSON对象传递到GET
路由,以便可以将render
传递到正确的客户端页面。
这里有我的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文件中的图书数据?有没有其他方法可以将此数据传递给页面?
答案 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)
希望有帮助,祝您好运!