【发布时间】:2020-10-02 18:44:29
【问题描述】:
我正在遵循 Node.js (https://app.sendgrid.com/guide/integrate/langs/nodejs) 上的 Sendgrid 设置指南,但我不断收到 API 密钥错误。
这是我的代码:
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
to: 'test@example.com',
from: 'test@example.com',
subject: 'Sending with Twilio SendGrid is Fun',
text: 'and easy to do anywhere, even with Node.js',
html: '<strong>and easy to do anywhere, even with Node.js</strong>',
};
sgMail
.send(msg)
.then(() => console.log('send mail success'))
.catch(console.log);
我的 API 密钥已在我的 .env 文件中正确设置:
SENDGRID_API_KEY=SG.oqKbQHcNxxxxxxxxxxxxxkY5B4o
这是我收到的错误消息:
API key does not start with "SG.".
ResponseError: Unauthorized
at BE-KeyCon/node_modules/@sendgrid/client/src/classes/client.js:133:29
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
code: 401,
response: {
headers: {
server: 'nginx',
date: 'Fri, 12 Jun 2020 21:31:08 GMT',
'content-type': 'application/json',
'content-length': '116',
connection: 'close',
'access-control-allow-origin': 'https://sendgrid.api-docs.io',
'access-control-allow-methods': 'POST',
'access-control-allow-headers': 'Authorization, Content-Type, On-behalf-of, x-sg-elas-acl',
'access-control-max-age': '600',
'x-no-cors-reason': 'https://sendgrid.com/docs/Classroom/Basics/API/cors.html'
},
body: { errors: [Array] }
}
}
如果我将 API 密钥设置为字符串,如下所示:
sgMail.setApiKey('SG.oqKbQHcNxxxxxxxxxxxxxkY5B4o')
然后就可以了。但显然出于安全原因,我不能这样离开。知道它为什么会这样以及如何解决它吗?
【问题讨论】:
-
process.env.SENDGRID_API_KEY评估为什么? -
未定义!我尝试了所有环境变量,它们都返回未定义。这很奇怪...... .env 文件在我的根目录中,我需要 dotenv 库。
-
如果我运行
node -r dotenv/config util/sendgrid.js,那么它会正确评估为 api 密钥。 -
您运行
require('dotenv').config()的时间有多早?您是否在致电process.env.SENDGRID_API_KEY之前确保它已经发生? -
我刚刚运行了
console.log(require('dotenv').config());,结果它找不到 .env 文件。我的项目中有两个主要文件夹,一个用于前端,一个用于后端,我在 BE 文件夹中有一个 .env 文件,认为这是我的根目录。我不得不将它移到实际的根目录,现在它工作正常。谢谢大家!
标签: node.js environment-variables sendgrid