首页 > 解决方案 > 如何让 .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 文件,而不是将其作为纯文本链接?谢谢!

标签: javascriptnode.jsejsdotenv

解决方案


我一直面临着类似的问题,并且似乎(在我有限的理解中)没有万无一失的方法可以完成您所要求的操作并完全隐藏客户端浏览器访问的密钥。但是,在您的具体用法中,我相信您的意思是将密钥打印到网页上,您当然不希望这样做。如果您从 ejs 标记中删除 = ,它将仅引用 js 变量,而不是将其呈现到页面中。

<%apikey%>

它仍然可以通过网络流量访问,但不会那么容易被盗。


推荐阅读