Estoy construyendo una API usando express netlify-lambda y firebase, pero encontré este error. Cuando visito la URL para obtener los datos, aparece un error de referencia: los encabezados no están definidos. Así que descubrí que era un problema con firebase, pero no pude encontrar la información correcta que estaba buscando.
Así que esto es lo que estoy tratando de hacer, aquí están mis importaciones:
const express = require('express'); const serverless = require('serverless-http'); const firebase = require("../resources/firebase"); // Import firebase config file const bodyParser = require('body-parser'); const {doc, getDoc } = require("firebase/firestore");Aquí está la parte del enrutador:
const app = express(); const router = express.Router(); router.get('/memes', async (req, res) => { const apiKey = req.query.key; const hashedApiKey = hashAPIKey(apiKey) // This is where i get the error const customerId = await getDoc(doc(firebase.db, "apiKeys", hashedApiKey)); const customer = await getDoc(doc(firebase.db, "customers", customerId.toString())); if (!customer.active) { res.sendStatus(403) } else { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('<h1>Hello from Express.js!</h1>'); res.end(); } }); app.use(bodyParser.json()); app.use('/.netlify/functions/index', router); module.exports = app; module.exports.handler = serverless(app); Después de ejecutar el comando para iniciar netlify-lambda "start": "netlify-lambda serve src" y luego visitar esta url http://localhost:9000/.netlify/functions/index/memes?key=bla aparecerá el error y netlify-lambda se apagará.
Supongo que necesito enviar encabezados con un token de Bearer a firebase antes de intentar obtener un documento. También podría estar completamente equivocado. De todos modos, si alguien sabe qué hacer, por favor dígame. Gracias por adelantado.
Para enviar encabezados con un token de portador a Firebase antes de intentar obtener un documento, se debe agregar el token de portador a Firebase a través del encabezado de autorización. El encabezado generalmente tiene el siguiente formato:
Authorization: Bearer <token>Esto está documentado en el Marco de autorización de OAuth 2.0: uso del token de portador, sección 2.1 . Por supuesto, su backend debe analizar el mismo formato.
Tenga en cuenta que el constructor de encabezados no está disponible en el entorno node.js. Deberá incluirlo desde el paquete node-fetch, al igual que fetch. Para obtenerlo de la función de búsqueda, puede usar una asignación de desestructuración.
const fetch = require('node-fetch'); const { Headers } = fetch;Para crear una nueva instancia, utilice la propiedad directamente.
let headers = new fetch.Headers();Para obtener más información, consulte la documentación de obtención de nodos .