我在我的网站上添加了一个gmail.js文件来进行Gmail集成。但是当我在另一个文件中需要gmail.js时,Node.js会抛出一个typeError。我在我的gmail.js文件中有以下代码。我在文件上分别使用了相同的代码并且它可以工作。我已正确安装了所有模块。
const express = require('express');
const google = require('googleapis');
var gmail = google.gmail('v1');
const googleAuth = require('google-auth-library');
const fs = require('fs');
var async = require('async');
var db = require('./db');
const SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'];
var oauth2Client = null;
fs.readFile('./client_secret.json', function(err, content){
if(err){
console.log("error loading client secret file" + err);
return;
}
var credentials = JSON.parse(content);
var clientSecret = credentials.installed.client_secret;
var clientId = credentials.installed.client_id;
var redirectUrl = credentials.installed.redirect_uris[0];
var auth = new googleAuth();
oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);
//temp variables
//i will take token from database
oauth2Client.credentials = {
access_token: access_token,
refresh_token: refresh_token,
token_type: token_type,
expiry_date: expiry_date
}
getThreadIds(["test@test.com"]);
});
function setOAuth2Credentials(token){
oauth2Client.credentials = token;
return true;
}
function getAuthUrl(){
var authUrl = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: SCOPES
});
console.log(authUrl);
return authUrl;
}
function getToken(code){
oauth2Client.getToken(code, function(err, token){
if(err){
console.log('Error while trying to get access to token ' + err);
return false;
}
oauth2Client.credentials = token;
db.storeGoogleAuthToken(token, function(err, result){
if(err){
console.log("error storing token to database " + err);
return false;
}
return true;
})
})
}
答案 0 :(得分:8)
api已被更改,因为它处于alpha状态,我刚才读到它。 我必须导入googleapis
var {google} = require('googleapis');
答案 1 :(得分:4)
以下文字是Release 26 note的引用:
BREAKING CHANGE:此库现已针对es6模块进行了优化。在以前 您将导入库的版本如下:
const google = require('googleapis');
在此版本和将来版本中,您必须使用命名导入:
const {google} = require('googleapis');
解释了这两行之间的差异here。