'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(...
我正在尝试通过 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(...