Estoy haciendo una aplicación express que requiere un mapa. Estoy usando HERE Maps API para la versión estándar de javascript para representar el mapa. https://developer.here.com/documentation/examples/maps-js
Ya estoy usando el paquete dotenv para variables de entorno (puerto, host) en mi aplicación. Pero no sé cómo ocultar la clave API del mapa en el backend cuando necesito usar el objeto del document para representar el mapa. Actualmente, estoy usando un archivo config.js separado para almacenar la variable, pero la clave aún está visible en la interfaz.
En conclusión, puedo ocultar la clave API en el backend pero no puedo representar el mapa en el backend y puedo mostrar el mapa en el frontend pero no puedo ocultar la clave API en el frontend. ¿Cómo puedo ocultar la clave API y representar el mapa?
Mínimo, reproducible, ejemplo:-
Estructura del directorio raíz
| public | config.js | map.js | views | index.pug | .env | index.js | package.jsoníndice.pug
doctype html html head link(rel="stylesheet" href="https://js.api.here.com/v3/3.1/mapsjs-ui.css") script(src="https://js.api.here.com/v3/3.1/mapsjs-core.js") script(src="https://js.api.here.com/v3/3.1/mapsjs-service.js") script(src="https://js.api.here.com/v3/3.1/mapsjs-ui.js") script(src="https://js.api.here.com/v3/3.1/mapsjs-mapevents.js") script(src="config.js" defer) script(src="map.js" defer) body #map(data-lat=lat data-lng=lng)config.js
const config = { MAP_API_KEY: `${API_KEY}` }mapa.js
const mapEl = document.getElementById('map') const platform = new H.service.Platform({ apikey: config.MAP_API_KEY }) const defaultLayers = platform.createDefaultLayers() const map = new H.Map(mapEl, defaultLayers.vector.normal.map, { center: { lat: parseFloat(mapEl.dataset.lat), lng: parseFloat(mapEl.dataset.lng) }, zoom: 5, pixelRatio: window.devicePixelRatio || 1 }) window.addEventListener('resize', () => map.getViewPort().resize()) const behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map)) const ui = H.ui.UI.createDefault(map, defaultLayers)Use cromo sin cabeza (tal vez titiritero) que carga solo el mapa, luego obtenga una captura de pantalla y use la captura de pantalla en su interfaz.
No puede representar un mapa en la interfaz sin una clave API. Tal vez debería considerar restringir el acceso a la API a dominios/ips específicos en su lugar.