【问题标题】:Send data from Server to Client in Meteor在 Meteor 中从服务器向客户端发送数据
【发布时间】:2016-01-29 10:45:25
【问题描述】:

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

我写了一个流星方法来帮助获取数据:

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

【问题讨论】:

  • 当您说:“不幸的是,退货不起作用。”发生什么了?你有错误吗?一个空对象?
  • 是的,客户端代码是什么样的,在各种 console.logs 中输出了什么样的东西?
  • 退货时我得到一个“未定义”。

标签: meteor


【解决方案1】:

您确定在返回请求之前已完成获取请求吗?

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

来自文档:

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
        });
    }

【讨论】:

  • 这无济于事,因为在客户端我仍然得到一个未定义的
  • 服务器端有结果吗?
【解决方案2】:

按照答案中的建议多次尝试解决此问题后,我意识到简单地返回整个 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);
            }
       });

这成功地规避了您在浏览器中使用单源策略所面临的问题。

【讨论】:

    猜你喜欢
    • 2014-09-07
    • 2017-04-07
    • 1970-01-01
    • 2015-02-10
    • 2021-02-02
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多