首页 > 解决方案 > 获取并将对象传递给节点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({})但它似乎不起作用。有什么建议么?:)

标签: node.jsexpress

解决方案


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/


推荐阅读