node.js - 获取并将对象传递给节点js渲染方法
问题描述
我正在使用 alpha vantage API,但在提取 else 语句中的数据以便在前端查看时遇到问题。
这是我的快速路线:
app.get('/', (req, res) => {
var url = 'https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=IBM&interval=5min&apikey=apikey';
request.get({
url: url,
json: true,
headers: { 'User-Agent': 'request' }
}, (err, resp, data) => {
if (err) {
console.log('Error:', err);
} else if (resp.statusCode !== 200) {
console.log('Status:', resp.statusCode);
} else {
// data is successfully parsed as a JSON object:
// console.log(data);
}
})
res.render("index");
})
我想将 else 语句中的数据变量传递给res.render("index" {//get data into here});
我尝试将数据变量分配给外部的另一个变量,request.get({})
但它似乎不起作用。有什么建议么?:)
解决方案
request.get
是一个异步函数,也就是说下面的回调函数里面的所有东西都不会立即执行,它会等到request.get
结束调用端点并返回数据后才会执行回调函数。
// the callback function of `request.get`
(err, resp, data) => {
if (err) {
console.log('Error:', err);
} else if (resp.statusCode !== 200) {
console.log('Status:', resp.statusCode);
} else {
// data is successfully parsed as a JSON object:
// console.log(data);
}
})
在执行流程方面,你res.render("index");
会在回调函数之前执行request.get
(它一直等到端点调用完成),这就是你无法访问的原因data
。
所以,为了res.render
访问data
,它应该放在回调函数中
(err, resp, data) => {
// ...other code
} else {
res.render('index', { data });
}
})
很好的参考阅读异步https://www.freecodecamp.org/news/nodejs-eventloop-tutorial/
推荐阅读
- java - android - 到 sqlite 的 json 键值对
- amazon-web-services - 如何将物联网 (IoT) 数据发送到 Amazon Web Services 上的数据库和 SQS 队列?
- sql-server - NLSSORT Oracle 到 SQL Server 2008
- go - 如何将 C.double 数组传递给 Cgo 函数?
- ruby - 正则表达式来测试类名的标准
- c++ - C ++中的AddressSanitizer黑名单不起作用
- localization - 当网站的基础语言不是英语时,TYPO3 默认 locallang.xlf
- java - 由于文本输入错误,应用程序不断崩溃
- javascript - 在 JS 中单独写日期
- python - 基于多个条件加入两个熊猫数据框