根据get response express填充数组
我有以下server.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中的表。 我的表格将填充从我的端点获取的url。
我在nodejs中有一些背景但我无法将其包装起来。
由于您需要知道多个请求何时完成,我建议您切换到使用请求承诺库,以便您可以使用promises来跟踪所有请求何时完成。 该库还会自动为您检查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 / await:
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); });
您必须等待所有请求得到解决,然后将final_res
数组发送回客户端。 您可以使用async/await
和Promise.all
概念执行此操作。 如果您不想使用这些资源,那么您需要手动计算并等待所有请求,使用计数器知道所有请求何时完成,如下所示:
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); } }); }); });
- 列式搜索给出“227200:101 Uncaught TypeError:otable.api()。列不是函数”JQuery dataTable中的错误
- 找出Jquery ajax请求被重定向到的位置
- AJAX调用适用于Chrome和Safari,但不适用于Firefox和IE?
- $ .ajax()和“Uncaught ReferenceError:数据未定义”
- 将数据从jQuery传递到PHP以获取ajaxpost
- jQuery ajax this.id undefined
- 在jQuery中将processData设置为false会破坏我的AJAX请求
- 使用AspNet.FriendlyUrls和AspNet.Identity从jquery.ajx调用webmethod期间身份validation失败
- jQuery AJAX和VBscript – 在jQuery AJAX中使用POST时无法获取VBscript变量中的值