google.gmail()给出错误TypeError:google.gmail不是函数?

时间:2018-02-13 08:05:02

标签: node.js express google-api gmail google-api-nodejs-client

我在我的网站上添加了一个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;
        })
    })
}

2 个答案:

答案 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