Meteor HTTP.call在服务器端正确使用
Meteor HTTP.call on server side correct using?
对不起我的英语。我是初级JS开发人员。我需要Meteor的帮助。我试着写rss聚合器。你能告诉我为什么这个代码对我来说不正确吗?rssContent始终未定义。但如果我尝试HTTP.call中的console.log(result.content),我会看到rss数据。我需要在这个文件的另一个函数中传递rssContent来解析XML,但HTTP.call 有问题
server.js代码:
var rssSources = ['http://news.yandex.ru/auto.rss'],
parsedRss = [];
var rssContent;
for (var i = 0; i < rssSources.length; i++) {
HTTP.call('GET', rssSources[i],
function(error, result) {
try {
rssContent = result.content;
} catch (e) {
console.log(e);
}
}
);
}
console.log(rssContent);
您的rssContent
变量总是未定义的,因为您在回调(异步)非阻塞方法中调用它。您必须使用同步(阻塞)方法来代替回调方法。我建议您,不要给全局变量赋值,只要收到http请求的响应,就直接将数据插入数据库。
阻塞示例:-
var rssSources = ['http://news.yandex.ru/auto.rss'],
parsedRss = [];
var rssContent = "";
for (var i = 0; i < rssSources.length; i++) {
var result = Meteor.http.call("GET", rssSources[i]);
if(result.statusCode == '200' && result.content){
rssContent += result.content;
}
}
console.log(rssContent);
非阻塞示例:-
var rssSources = ['http://news.yandex.ru/auto.rss'],
for (var i = 0; i < rssSources.length; i++) {
HTTP.call('GET', rssSources[i],
function(error, result) {
try {
//HERE INSERT YOUR DATA INTO THE DATABASE.INSTEAD OF ASSIGNING THE VALUE TO GLOBAL VARIABLE.
} catch (e) {
console.log(e);
}
}
);
}
Meteor中有两种运行HTTP请求的方法。默认情况下,它以同步方式运行。如果您传递回调,它将异步运行。在这种情况下,假设这是服务器端代码,则更容易省略回调并将其视为同步(更不用说IMO了)。
var rssContent = [];
for (var i = 0; i < rssSources.length; i++) {
var result = HTTP.call('GET', rssSources[i]);
// error handling
resultContent.push(result);
}
我不熟悉如何处理同步版本的错误。你可以前往这里了解他们文档中的更多详细信息。
相关文章:
- 如何使用skip参数使用angular ui引导进行服务器端分页
- Webpack开发服务器和React服务器端渲染
- 提示使用服务器端事件处理程序激活JavaScript
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如何进行服务器端HTTP重定向更新引用程序(更改原始引用程序)
- 在 MEAN Web 应用程序中,从 Express(服务器端)发送 HTTP 响应错误 403、500,未在 Angu
- 如何使用 Web 表单(不是 MVC 或 asmx 页面)从 ajax Http POST 获取 c# 服务器端的复选框
- 从node.js本地服务器端口5000到8000的http请求出现错误
- 有没有一种方法可以在没有服务器端语言的情况下完成http头请求并获得时间
- Meteor HTTP.call在服务器端正确使用
- 通过HTTP-Safe发送Google+Hybrid服务器端流一次性授权代码
- Meteor服务器端HTTP请求
- 从服务器端发出HTTP请求
- 使用express&在服务器端解析AngularJS http.post数据;正文解析器
- 流星HTTP.在客户端调用未定义,在服务器端工作
- 试图从客户端发送对象到服务器(AngularJS $http.post)
- 如何在.net服务器端检索Http请求参数
- 保持客户端与服务器端状态管理和http请求同步
- 服务器端JavaScript:HTTP GET与cookie
- request.body.email 是使用 http.get 的未定义节点 js 服务器端