#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%>
Он по-прежнему будет доступен через сетевой трафик, но его будет не так легко украсть.