当前位置: 首页 > 知识库问答 >
问题:

基于get response express填充数组

钱华晖
2023-03-14

我有以下服务器.js获取路由

app.get('/', function(req, res) {
var url;
var final_res = [];
endpoints.forEach(function(url){
    request(url, function(error,response,body){
        if(!error && response.statusCode == 200){
            final_res.push(url.url);
            console.log(url.url);
        }else{
            res.send(err);
            console.log(err);
        }
    });
});
});

这是我的客户端js,我用jQuery获取完全相同的get

$(document).ready(function() {
$.get('http://localhost:3000/', function(data) {
    console.log(data);
    $("#body").text(data);
});
});

当我打开index.html时,它会正确显示用户交互界面,并在我的终端中执行我的server.js它会正确显示url。我无法完成的是如何使用我的jQuery接收到的数据来填充我的html中的表。我的表将填充从我的endpoint获取的url。

我有一些nodejs的背景,但我不能总结这个。

共有2个答案

任长卿
2023-03-14

您必须等待所有请求得到解决,然后将<code>final_res概念。如果您不想使用这些资源,则需要手动计数并等待所有请求,使用计数器了解所有请求何时完成,如下所示:

app.get('/', function(req, res) {
    var url;
    var final_res = [];
    var respCounter = endpoints.length;
    endpoints.forEach(function(url){
        request(url, function(error,response,body){
            respCounter--;
            if(!error && response.statusCode == 200){
                final_res.push(url.url);
                console.log(url.url);
            }else{
                res.send(err);
                console.log(err);
            }
            if(respCounter == 0) {
                res.send(final_res);
            }
        });
    });
});
慕高阳
2023-03-14

由于您需要知道多个请求何时完成,我建议您改用请求-promise库,这样您就可以使用promise来跟踪所有请求何时完成。该库还会自动检查statusCode。所以,你可以这样做:

const rp = require('request-promise');

app.get('/', function(req, res) {
    Promise.all(endpoints.map(url => {
        return rp(url).then(r => {
            return url.url;
        }).catch(err => {
            // rather than error, just return null result
            return null;
        })
    })).then(results => {
        // filter out null values, then send array as the response
        res.json(results.filter(item => item !== null));
    }).catch(err => {
        console.log(err);
        res.sendStatus(500);
    });
});

这将并行运行所有请求,但按顺序收集结果,这将导致最快的总体运行时间。

如果你想一次运行一个,你可以像这样使用async/wait:

const rp = require('request-promise');

app.get('/', async function(req, res) {
    let results = [];
    for (let url of endpoints) {
        try {
            let r = await rp(url);
            if (r) {
                results.push(url.url);
            }
        } catch(e) {
            // ignore error
        }
    }
    res.json(results);
});

EDIT 2020年1月 - 维护模式下的请求()模块

仅供参考,request模块及其衍生产品,如requestpromise,目前处于维护模式,不会积极开发以添加新功能。你可以在这里阅读更多关于推理的内容。本表列出了一系列备选方案,并对每种方案进行了讨论。我自己也一直在使用<code>get()

 类似资料:
  • 如何创建包含以下值f(0),f(1),…,f(N-1)的const std::数组,其中f是任何函数:静态constexpr size_t f(int index)?当我确切地知道N时,我显然可以写

  • 我有一个数据网格,其中组合框是从Db填充的。 我试图实现的是,当我在“Esercizio”列中选择一些内容时,“Video”列的单元格会自动填充Db的“link_video”列中的相应值。 因此,如果我选择“回扣”,我需要在文本框单元格中看到来自db的回扣链接视频。 这是我用来在表单加载时填充组合框的代码: private void Myform_Load(对象发送方,EventArgs e) {

  • 本文向大家介绍基于jQuery的表单填充实例,包括了基于jQuery的表单填充实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇基于jQuery的表单填充实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 我有以下问题,因为我是pyspark的新手。基于来自两列的值的条件,我想填充第三列。条件是: < li >如果分号包含在col2中,请检查col1 < ul > < li >如果col1 == 1,则取分号前的值 < li >如果col1 == 2,则取分号后的值 这就是数据帧的样子。 我创建了下面的udf,它给出了错误“不能将列转换为布尔值:请使用” 我通过谷歌搜索各种功能构建了这个udf,所以

  • 根据和的公共列在中使用填充列的最佳方法是什么? 得到: 编辑:我还想将列名更改为,这样预期的输出如下所示: 尝试过: 它发现了错误: 更新2: : :

  • Arrays 类提供了一个 fill() 方法,可以在指定位置进行数值填充。fill() 方法虽然可以填充数组,但是它的功能有限制, 只能使用同一个数值进行填充。语法如下: 其中,array 表示数组,value 表示填充的值。 例 1 声明一个 int 类型的 number 数组,然后通过 for 语句进行遍历,在该语句中调用 Arrays 类的 fill() 方法来填充数组,并输出数组中元素的