【问题标题】:Meteor.JS retrieving from Google API ProblemsMeteor.JS 从 Google API 问题中检索
【发布时间】:2013-01-02 04:46:56
【问题描述】:

哇哦,我还有更多 Meteor 问题!我要做的是从 YouTube Data API v3 中检索用户的频道“sn-p”。这包含一个对象,其中包含一个名为 items 的数组,其中包含我在应用程序中需要的所有数据。我当前的客户端代码如下:

if (Meteor.user() && !Meteor.loggingIn()) {
    Meteor.http.get("https://www.googleapis.com/youtube/v3/channels?part=snippet&mine=true&access_token=" + Meteor.user().services.google.accessToken, function (err, result) {
        console.log(result.statusCode, result.data);
        var retdata =  result.data;
        return retdata.items;
    });
}

在客户端控制台中输出:

200 
Object {kind: "youtube#channelListResponse", etag: ""eTr3dHIt5_K9qdGtRKL-5XdpiQI/4Lt-RSCeBy7D3VwX3c_uic6-LIM"", pageInfo: Object, items: Array[1]}

但是由于某种原因该函数返回undefined,这意味着我不能使用它的返回值。

为什么会这样?

【问题讨论】:

    标签: javascript api youtube meteor


    【解决方案1】:

    那是因为您将返回数据的方法作为第二个参数传递给 http.get 作为异步回调,一旦数据从您调用的地址返回,该回调就会被调用。所以:

    Meteor.http.get(url, callback);
    

    不返回任何内容。相反,与其在回调中返回一个对象,不如将其设置在get 之外的范围内:

    if (Meteor.user() && !Meteor.loggingIn()) {
        var url = "https://www.googleapis.com/youtube/v3/channels";
        var params = {
          access_token: Meteor.user().services.google.accessToken,
          part: "snippet",
          mine: "true"
        };
        Meteor.http.get(url, {params: params}, function (err, result) {
            console.log(result.statusCode, result.data);
            var retdata =  result.data;
            Session.set("myItems", retdata.items);
        });
    }
    

    确保您还手动发布了services.google.accessToken 字段,否则它在 Meteor.user() 上不可用。并确保您在模板或响应式地方执行所有这些操作,如果 Meteor.user() 尚不可用,Meteor 将重新运行代码。

    【讨论】:

    • 我试过了,它仍在登录控制台,但由于某种原因仍然返回 undefined。我应该把它放在某种特定的方法或其他东西中,还是直接把它放到 client.js 中?
    • 更正——它根本没有做任何事情。我在 client.js 的 Meteor.startup 中运行它。
    • 啊 - 根据the docs,第二个参数是[options],而不是回调,所以你应该将参数作为第二个参数传递,然后将函数作为第三个参数传递。我更新了示例。
    • 有效,但仅在 server.js 中有效。当我在 client.js 中运行它时,它不会向任何一个控制台(服务器终端或客户端控制台)写入任何内容。由于您无法在 server.js 中设置会话,因此我认为它必须在客户端代码中。为什么它不起作用?我直接从您的示例中复制了它。
    • 你在 Meteor.method 或 publish 方法中有代码吗?您不能在这些之外调用 Meteor.user() ,否则它们会引发错误。否则代码对我有用...
    【解决方案2】:

    在与 Meteor 的 IRC 频道的人进行了大量工作和讨论后,我们终于在gist 中得出了工作结论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 2012-12-19
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多