javascript - 如何让 .env 变量在 ejs 文件中工作?
问题描述
我正在尝试隐藏 API 密钥,并且正在尝试使用 dotenv 来隐藏它们。基本上,我尝试的所有操作都会导致它们以纯文本形式显示,出现“apikey is undefined”错误,使整个 nodejs 服务器崩溃等。这是我正在使用的代码:
.env 文件
APIKEY="XxXxXxXxXxXxXxXxXxXxXxXxX"
app.js 文件
const express = require("express");
const app = express();
const path = require("path");
require('dotenv').config()
const favicon = require("serve-favicon");
app.use(favicon(path.join(__dirname, "public", "images", "favicon.ico")));
app.use(express.static("public"));
app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));
app.get("/", function (req, res) {
res.render("home", {apikey: process.env.APIKEY});
});
在我的home.ejs文件中,我尝试在此处调用该环境变量:
home.ejs 文件
var api_key = "<%=apikey%>";
此方法导致 API 密钥以纯文本形式链接(不是我想要的)。 如果按照上面的方法查看页面的源码
我也尝试过这样做:
var api_key = APIKEY;
这会导致 APIKEY is undefined 错误。我对 nodejs/express 比较陌生,我无法弄清楚!如何将 APIKEY .env 变量链接到我的 ejs 文件,而不是将其作为纯文本链接?谢谢!
解决方案
我一直面临着类似的问题,并且似乎(在我有限的理解中)没有万无一失的方法可以完成您所要求的操作并完全隐藏客户端浏览器访问的密钥。但是,在您的具体用法中,我相信您的意思是将密钥打印到网页上,您当然不希望这样做。如果您从 ejs 标记中删除 = ,它将仅引用 js 变量,而不是将其呈现到页面中。
<%apikey%>
它仍然可以通过网络流量访问,但不会那么容易被盗。
推荐阅读
- javascript - 如何将异步承诺功能重构为非异步以避免反模式
- c - 将带符号的正整数键入无符号(反之亦然)
- python - 使用 sendmail() 函数时从应用程序收到的 Django 不完整响应
- android - TypeConverters 不适用于 @Query 中的集合
- c# - .Net Blazor 0.9 代理错误 502 仅在 http post apache2 和 Ubuntu 16.04.6 LTS
- python - Python TKinter 奇怪的行为
- javascript - 如何避免“内容安全策略:页面设置阻止加载内联资源(“default-src”)”?
- servicestack - 使用 ServiceStacks JsonServiceClient 时的 Cors 配置问题
- python - pandas DataFrame中的冲突日期时间索引
- python - 如何返回导致包含 True 标志的关键字