我正在创建一个网站,它使用一个API来显示足球(足球)比分,赛程等.我试图创建一个全局变量来保存请求数据,然后传递到ejs,然而这似乎不起作用.

router.get('/stats', (req, res) => {


request(options, function (error, response, body) {
    if (error) throw new Error(error);

  top_scorer_data = JSON.parse(body)

});


request(options2, function (error, response, body) {
    if (error) throw new Error(error);

  top_assists_data = JSON.parse(body)

});


request(options3, function (error, response, body) {
    if (error) throw new Error(error);

  top_red_cards_data = JSON.parse(body)  

});


request(options4, function (error, response, body) {
    if (error) throw new Error(error);

  top_yellow_cards_data = JSON.parse(body)

});

res.render('bundesliga/stats', {})

})

推荐答案

你应该遵循Dry原则,将request转移到一个服务或助手功能. 您不应该使用全局变量,而应该使用Promise,然后等待所有请求完成.

因此,您应该简化请求方法(您真的应该迁移到axiosnode-fetch,因为request已弃用)

然后使用Promise.all对每个选项发出所有请求,然后将结果收集到变量中,然后将这些变量传递给.render方法.

试试这个:

router.get('/stats', async(req, res) => {

    function getData(options) {
        return new Promise((resolve, reject) => {
            request(options, function(error, response, body) {
                if (error) reject(error);
                resolve(JSON.parse(body));
            });
        });
    }



    const [top_scorer_data, top_assists_data, top_red_cards_data, top_yellow_cards_data] = await Promise.all([
        getData(options),
        getData(options2),
        getData(options3),
        getData(options4)
    ]).catch(err => {
        console.log('err', err);
    });

    res.render('bundesliga/stats', {
        top_scorer_data,
        top_assists_data,
        top_red_cards_data,
        top_yellow_cards_data
    });

});

Javascript相关问答推荐

react/redux中的formData在expressjs中返回未定义的req.params.id

如何找出摆线表面上y与x相交的地方?

在Vite React库中添加子模块路径

在使用HighChats时如何避免Datatables重新初始化错误?

如何强制Sphinx中的自定义js/css文件始终加载更改而不缓存?

如何将innerHTML字符串修剪为其中的特定元素?

Angular 形式,从DOM中删除不会删除指定索引处的内容,但会删除最后一项

搜索功能不是在分页的每一页上进行搜索

<;img>;标记无法呈现图像

第一项杀死下一项,直到数组长度在javascript中等于1

Docent.cloneNode(TRUE)不克隆用户输入

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

使用jQuery find()获取元素的属性

如何根据查询结果重新排列日期

使用API调用的VUE 3键盘输入同步问题

未捕获的不变违规:即使在使用DndProvider之后也应使用拖放上下文

如何创建一个for循环,用于计算仪器刻度长度并将其放入一个HTML表中?

try 导入material 时出现错误NG0203

使用JAVASCRIPT的偏移力矩函数库问题

更改输入文本框的背景时出现问题