【问题标题】:How do you get .env variables to work in ejs files?如何让 .env 变量在 ejs 文件中工作?
【发布时间】:2021-02-04 16:34:32
【问题描述】:

我正在尝试隐藏 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 密钥以纯文本形式链接(不是我想要的)。 If you view the source of the page following the above method

我也试过这样做:

var api_key = APIKEY;

这会导致 APIKEY is undefined 错误。我对 nodejs/express 比较陌生,我无法弄清楚!如何将 APIKEY .env 变量链接到我的 ejs 文件,而不是将其作为纯文本链接?谢谢!

【问题讨论】:

  • 看来您确定了“如何让环境变量在 pjs 文件中工作”;但是,您必须意识到,无论您喜欢在服务器端做什么,您发送给浏览器的所有内容都将以文本形式在浏览器中可用。我认为你没有问对问题。

标签: javascript node.js ejs dotenv


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-10-20
    • 1970-01-01
    • 2021-05-20
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2019-12-23
    • 1970-01-01
    相关资源
    最近更新 更多