Как заставить переменные .env работать в файлах ejs?

#javascript #node.js #ejs #dotenv

#javascript #node.js #ejs #dotenv

Вопрос:

Я пытаюсь скрыть ключ API и пытаюсь использовать dotenv, чтобы скрыть их. В основном все, что я пробую, либо приводит к тому, что они отображаются в виде открытого текста, получая ошибку «apikey не определен», сбой всего сервера 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 я пытаюсь вызвать эту переменную env здесь:

файл home.ejs

 var api_key = "<%=apikey%>";
 

Этот метод приводит к тому, что ключ API связывается в виде обычного текста (НЕ то, что я хочу).
Если вы просматриваете источник страницы, следуя описанному выше методу

Я тоже пробовал делать:

 var api_key = APIKEY;
 

Это приводит к ошибке APIKEY is undefined. Я относительно новичок в nodejs / express и не могу в этом разобраться! Как мне связать переменную APIKEY .env с моим файлом ejs, кроме ссылки на нее в виде обычного текста? Спасибо!

Комментарии:

1. Похоже, вы определили » как заставить переменные env работать в файлах pjs «; Но вы должны понимать, что все, что вы отправляете браузеру, будет доступно в браузере в виде текста, независимо от того, что вы предпочитаете делать на стороне сервера. Я не думаю, что вы задали правильный вопрос.

Ответ №1:

Я столкнулся с аналогичной проблемой, и, похоже (в моем ограниченном понимании), нет надежного способа сделать то, что вы просите, и полностью скрыть ключ, к которому обращается клиентский браузер. Однако в вашем конкретном использовании, я полагаю, вы имеете в виду, что он печатает ключ на веб-странице, чего вы, конечно, не хотите. Если вы удалите the = из своего тега ejs, он будет просто ссылаться на переменную js, а не отображать ее на странице.

<%apikey%>

Он по-прежнему будет доступен через сетевой трафик, но его будет не так легко украсть.