Node/Express/Nuxt 应用程序未获取环境变量

Posted

技术标签:

【中文标题】Node/Express/Nuxt 应用程序未获取环境变量【英文标题】:Environment variable not being picked up by Node/Express/Nuxt app 【发布时间】:2019-10-15 23:36:50 【问题描述】:

我正在尝试使用我的 Vue/Nuxt 应用程序设置 SendGrid,但是我只能通过对 API 密钥进行硬编码来使其工作。当我尝试使用首选的环境变量方法时,我得到一个未经授权的错误。这是因为应用程序没有获取变量,而是返回 Undefined

如何让应用获取变量?

我的 API KEY 保存在项目根目录中名为 sendgrid.env 的文件中。

然后,我的 Nuxt 项目中运行了一个 Node/Express 应用程序,代码如下:

const express = require('express')
const app = express()

app.get('/', (req, res, next) => 
  res.send('API root')
)

app.get('/sendmail', (req, res, next) => 

// using Twilio SendGrid's v3 Node.js Library
// https://github.com/sendgrid/sendgrid-nodejs
const sgMail = require('@sendgrid/mail');
sgMail.setApiKey(process.env.SENDGRID_API_KEY);

const msg = 
    to: 'somebody@something.net',
    from: 'no-reply@somewhereelse.com',
    subject: 'Test SendGrid',
    text: 'This is a test of the SendGrid app on Node',
    html: '<strong>This is a test of the SendGrid app on Node</strong>',
;

sgMail.send(msg);

res.send('SendMail API');

)

// export the server middleware
module.exports = 
  path: '/api',
  handler: app

我已经使用 Curl 和硬编码 API 密钥测试了代码,所以密钥是正确的,它只是没有被拾取的环境变量。

我做错了什么?

【问题讨论】:

【参考方案1】:

您的package.json 文件的依赖项部分中是否有"dotenv": "^6.2.0"

require('dotenv').config(); 在你的主 JS 文件中?

这些行是让它工作所必需的。

【讨论】:

是的,我愿意——不过我已经解决了这个问题,只是在输入一个答案。很快就会发布。 谢谢!这正是我所需要的。【参考方案2】:

好的,我已经解决了这个问题。

似乎使用 @nuxt/dotenv 会导致读取环境变量时出现问题。

我删除了 @nuxt/dotenv 并刚刚通过 npm 安装了 dotenv,然后将 API 密钥放在 .env 文件中并被拾取。

离开这里以防其他人遇到类似问题。

【讨论】:

以上是关于Node/Express/Nuxt 应用程序未获取环境变量的主要内容,如果未能解决你的问题,请参考以下文章

应用程序处于后台时未收到后台获取远程通知,并且用户未通过推送通知进入

ag-chart-tooltip 未显示工具提示 - 应用程序未获取 css

获取 NSManagedObject 未保存

Swagger 未加载 - 无法加载 API 定义:获取错误未定义

R 中的 ODBC 库 - 获取“未找到数据源名称且未指定默认驱动程序”错误

通过PackageInfo 能获取到哪些信息