我必须在NodeJS中创建一个小程序,它将检查用户的帐户是否有新邮件,并通过短信(使用Twilio)通知他们是否有新邮件。不幸的是,我遇到了让fetch功能起作用的麻烦。
我搜索了一段时间,我找到的所有代码段都与我在下面发布的代码段相同:
var gmail = google.gmail('v1');
//console.log("auth is " + util.inspect(auth, false, null));
// Line 77 under this comment
gmail.users.messages.list({userId: 'me', auth: auth}, function(err, response) {
console.log("this is " + util.inspect(response, false, null) + "with error " + err);
});
当它运行时,它会崩溃:
/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/lib/apirequest.js:180 req = authClient.request(options,callback); ^
TypeError:authClient.request不是函数 at createAPIRequest(/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/lib/apirequest.js:180:22) at Object.Gmail.self.users.messages.list(/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/googleapis/apis/gmail/v1.js:728:16) 在CronJob。 (/Users/mirtle/Documents/Universishit/smsmirtle/server.js:77:26) 在CronJob.fireOnTick(/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/cron/lib/cron.js:392:22) 在callbackWrapper [as _onTimeout](/Users/mirtle/Documents/Universishit/smsmirtle/node_modules/cron/lib/cron.js:435:9) 在Timer.listOnTimeout(timers.js:92:15)
就像我说的那样,我能找到的所有片段,包括其他StackOverflow问题,都是这样的,所以我不知道我在这里做错了什么。
身份验证令牌有效。如果您取消注释我的第77行注释上方的注释,它会正确打印它。它还运行Google提供的示例来打印标签并打印,因此令牌有效且经过授权。
作为一个好奇心,如果我这样称呼函数:
gmail.users.messages.list({}, function(err, response){...}
没有参数,它不会崩溃,但它抱怨没有userId
。
我也可以在没有第一个参数的情况下调用它,但它也抱怨没有userId
。
我将非常感谢您提供的任何帮助。
答案 0 :(得分:1)
您应该首先将其设置为oauth凭据,而不是直接使用包含//main.ts
import func = require('./commonjs-export-function');
和其他数据的变量auth
。我遇到了同样的问题。我做的是(见下面的代码)
access_token
然后我成功获取所有电子邮件和线程ID。希望这会对你有所帮助。
答案 1 :(得分:0)
听起来你传递的是auth令牌,但是你需要传递auth客户端。
我在谈论列表函数的第一个参数:'{userId:'me',auth:auth}'
尝试制作用于获取令牌的auth客户端(例如google.auth.JWT)。