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

时间:2016-01-29 10:45:26

标签: meteor

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

我编写了一个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

2 个答案:

答案 0 :(得分:1)

您确定在返回请求之前已经完成了请求吗?

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

来自doc:

HTTP.get(url, [callOptions], [asyncCallback])

尝试:

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

        HTTP.get(url_l, function(err, response){
            if(err)
                console.log(err);
            var status = response.statusCode
            var content = response.content

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

答案 1 :(得分:0)

在答案中建议多次尝试解决此问题之后,我意识到简单地返回整个HTTP Get函数会更容易。

我定义了一个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);
            }
       });

这可以避免您在浏览器中成功实现单原始策略所面临的问题。