'this' 在 npm 包中未定义

'this' undefined in npm package

我正在尝试通过 OAuth2 使用 Google 进行身份验证,并且我正在使用 googleapis NPM 包。为此,我正在创建一个小型本地包以在我的项目中使用:

Package.js

Npm.depends({
  "googleapis": "2.0.1"
});

Package.describe({
  name: 'google-tokens',
  summary: 'Library for requesting Google API tokens',
  version: '0.0.1'
});

Package.onUse(function (api) {
  api.use(['underscore', 'http', 'service-configuration', 'oauth', 'accounts-oauth'], ['client', 'server']);

  api.addFiles('lib/tokens_client.js', 'client');
  api.addFiles('lib/tokens_server.js', 'server');

  api.export(['Tokens']);
});

tokens_server.js(包)

Tokens = (function() {
  Google       = Npm.require('googleapis');
  OAuth2Client = Google.auth.OAuth2;
  var my       = {};

  my.fetchTokens = function(code) {
    var clientId     = Meteor.settings.google.CLIENT_ID;
    var clientSecret = Meteor.settings.google.CLIENT_SECRET;
    var redirect     = Meteor.settings.google.REDIRECT_URL;

    oauth2Client = OAuth2Client(clientId, clientSecret, redirect);

    var response = Async.runSync(function(done) {
      oauth2Client.getToken(code, function(error, tokens) {
        done(error, tokens);
      });
    });

    console.log(response);
    return response;
  };

  ....

但是上面的代码returns

Exception while invoking method 'addChannel' TypeError: Cannot set property 'transporter' of undefined
I20150316-23:33:03.520(1)?     at AuthClient (/Users/madsh/Programming/Projects/youtubr/packages/google-tokens/.npm/package/node_modules/googleapis/node_modules/google-auth-library/lib/auth/authclient.js:25:20)
I20150316-23:33:03.520(1)?     at OAuth2Client (/Users/madsh/Programming/Projects/youtubr/packages/google-tokens/.npm/package/node_modules/googleapis/node_modules/google-auth-library/lib/auth/oauth2client.js:38:23)
I20150316-23:33:03.520(1)?     at Object.my.fetchTokens (packages/google-tokens/lib/tokens_server.js:11:1)

其中指的是.npm/package/node_modules/googleapis文件夹中的node_modules文件夹里面的这部分内容,其中包含以下内容

'use strict';

var DefaultTransporter = require('../transporters.js');

/**
 * Base class for authentication clients.
 */
function AuthClient() {
  this.transporter = new DefaultTransporter(); <---------- Failing line
}
/**
 * Export AuthClient.
 */
module.exports = AuthClient;

我不知道为什么会这样,有什么建议吗?

您应该将授权客户端创建为一个实例,即

var client = new Oauth2Client(...