javascript - 如何在快速路线之间传递数据?
问题描述
我正在POST
路由中进行 API 调用,但由于某种原因,我无法在路由中传递JSON
数据。所以我正在考虑将 JSON 对象传递给路由,以便将其传递到正确的客户端页面。res.render
POST
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 文件中的 bookdata?是否有另一种方法将这些数据传递到页面?
解决方案
在语义上,它应该是一个 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)
希望有帮助,祝你好运!
推荐阅读
- swift - Swift 中没有这样的模块 SwipeMenuViewController 错误
- cron - cloudwatch 事件计划中的多个 cron 表达式
- symfony - Symfony Doctrine Query:SELECT ALL 取决于时差
- java - 为什么 label.equals(label1) 代码看不到 label1?
- qemu - 拼命地试图在 qemu 上运行 raspbian buster,挂在黑屏上
- powerbi - 为什么使用过滤器计算会返回此结果?
- javascript - 如何从动物数据库查询中检索文档 ID
- c - #define 与 const 全局
- reactjs - 获取当前用户 React Symfony
- azure-functions - Azure Function App - 连接字符串错误