在Meteor中将数据从服务器发送到客户端

在Meteor中将数据从服务器发送到客户端,meteor,Meteor,我想获取网页的内容,在服务器端进行一些处理(以避免在客户端遇到同源安全问题),然后将结果发送给客户端显示 我写了一个Meteor方法来帮助获取数据,如下所示: Meteor.methods( { getURL: function(url_l){ console.log("Request: "+url_l) // var httpResult = HTTP.get(url_l){}

我想获取网页的内容,在服务器端进行一些处理(以避免在客户端遇到同源安全问题),然后将结果发送给客户端显示

我写了一个Meteor方法来帮助获取数据,如下所示:

Meteor.methods(
    {
        getURL: function(url_l){
            console.log("Request: "+url_l)

            //  var httpResult = HTTP.get(url_l){}
            //  return httpResult.data.response;

            var response = HTTP.get(url_l)
            var status = response.statusCode
            var content = response.content

            console.log(status)
            console.log(content)

            return content
        }
    });
不幸的是,返回不起作用


除了创建数据库条目之外,我想不出将这些数据传递回客户端的方法。我得到一个“未定义”的回报

更新 我还尝试了异步回调:

Meteor.methods(
    {
        getURL: function(url_l){
                console.log("Request: "+url_l)
            //  var httpResult = HTTP.get(url_l){}
            //   return httpResult.data.response;
            var response = HTTP.get(url_l, function(err,res){
                    if(err)
                        console.log(err)

                        var status = res.statusCode
                var content = res.content

              console.log(status)
              console.log(content)
              return content

            });

             }
    });
只是澄清一下问题-无论我使用的是同步还是异步HTTP回调,当我这样做时:

//AUtofetch
a = Meteor.call("getURL",url_l)
console.log(a)
我得到一个未定义的

The url they entered is: http://shaunak.de
siteace.js:115 undefined

您确定在返回请求之前已完成get请求吗

通常,您必须将回调设置为HTTP.get以确保请求已完成:

来自文档:

HTTP.get(url, [callOptions], [asyncCallback])
尝试:


在按照答案中的建议多次尝试解决这个问题之后,我意识到简单地返回整个HTTPGET函数会更容易

我定义了一个Meteor方法,getUrl将请求url作为参数:

Meteor.methods(
    {
        'getURL': function(url_l){
                console.log("Request: "+url_l)
    return HTTP.get(url_l)
    } 
我通过这个电话访问了它:

Meteor.call("getURL",url_l,{},function(err,res){
         if(err){
           console.log('Error: '+err);
         }
         if(!err){
         console.log('Response: '+res);
            }
       });

这成功地避免了浏览器中单源策略所面临的问题

当你说:“不幸的是,回报不起作用。”会发生什么?你有错误吗?空对象?是的,客户端代码是什么样子的,以及在各种控制台中输出的是什么类型的东西。日志?我在返回时得到一个“未定义的”。这没有帮助,因为在客户端我仍然得到一个未定义的对象。您在服务器端有结果吗?
Meteor.call("getURL",url_l,{},function(err,res){
         if(err){
           console.log('Error: '+err);
         }
         if(!err){
         console.log('Response: '+res);
            }
       });