如何在.env文件中使用模板字面量存储JWT公钥并正常读取?
问题原因
.env是纯文本配置文件,本身不支持任何JavaScript语法,你写的反引号模板字面量是JS专属语法,dotenv不会对其做JS语法解析。同时你的写法把PUBLIC_KEY=单独放在第一行,dotenv默认按行解析键值对,会直接判定该键的值为空,所以读取结果是空字符串。
解决方案
方案1:单行写法(兼容所有版本dotenv)
把公钥的换行替换为转义字符\n,整体用双引号包裹,写在同一行即可:
PUBLIC_KEY="--BEGIN PUBLIC--\nAAAAAA\nBBBBBB\nCCCCCC\n--END PUBLIC--"
读取后JS会自动识别\n为换行符,无需额外处理。
方案2:多行写法(dotenv v15.0.0及以上版本支持)
直接用双引号包裹整个公钥内容,正常换行编写即可,无需加反引号:
PUBLIC_KEY="--BEGIN PUBLIC-- AAAAAA BBBBBB CCCCCC --END PUBLIC--"
额外排查项
- 确认你在
gulpfile中引入dotenv后调用了dotenv.config()方法,如果.env文件不在执行gulp命令的工作目录下,需要手动指定路径:require('dotenv').config({ path: require('path').resolve(__dirname, '.env') }) - 如果是前端代码读取环境变量,需要确认gulp的打包配置已经将环境变量注入到产物中,前端运行时默认无法直接读取服务端的
process.env变量。
内容的提问来源于stack exchange,提问作者ebenezer
相关产品推荐
相关产品推荐

