Actualmente estoy tratando de implementar la API de Easypost; sin embargo, el ejemplo de los documentos es que la consola registra un registro nulo en mi front-end (localhost: 3000)... ¿alguien sabe qué estoy haciendo mal? Gracias... La primera vez que uso firebase, así como easypost & react
funciones/index.js:
const functions = require("firebase-functions"); const EasyPost = require("@easypost/api"); const api = new EasyPost(TEST_API_KEYS); exports.buyShipping = functions.https.onCall((data, res) => { const shipment = new api.Shipment({ from_address: { street1: "417 MONTGOMERY ST", street2: "FLOOR 5", city: "SAN FRANCISCO", state: "CA", zip: "94104", country: "US", company: "EasyPost", phone: "415-123-4567", }, to_address: { name: "Dr. Steve Brule", street1: "179 N Harbor Dr", city: "Redondo Beach", state: "CA", zip: "90277", country: "US", phone: "4155559999", }, parcel: { length: 8, width: 5, height: 5, weight: 5, }, }); shipment.save().then((s) => { s.buy(shipment.lowestRate()).then((result) => { return result; }); }); }); });Interfaz:
import { initializeApp } from "firebase/app"; import { getFunctions, httpsCallable } from 'firebase/functions'; /// const app = initializeApp(firebaseConfig); const functions = getFunctions(app); const buyShipping = httpsCallable(functions, 'buyShipping') const buy = async () => { await buyShipping().then((result) => { /** @type {any} */ console.log(result) })} /// <button onClick={buy}>Purchase</button>Parece que está iniciando sesión en la consola en su backend, lo que no hará nada útil. En su lugar, querrá devolver el resultado de su llamada de buyShipping desde el backend para que su frontend pueda mostrarlo en la página o registrarlo en la consola o lo que sea que tenga la intención de hacer con él. Además, sus dos llamadas de función no comparten el mismo nombre, por lo que lo más probable es que no esté llamando a su backend (según el ejemplo proporcionado). buyShipping es el nombre de la función en el backend pero está llamando a sendPackage en el frontend.
Querrá que toda su lógica viva en su servidor de nodo backend y no haga nada con ella excepto regresar. Luego, toda su lógica de "representación" (visualización, registro, etc.) ocurrirá en la interfaz llamando a esas funciones desde el backend.
Encontré el problema; No puedo tener una devolución dentro de la función shipping.save en mi backend de firebase... esto funcionó:
exports.buyShipping = functions.https.onCall((data, res) => { const shipment = new api.Shipment({ from_address: { street1: "417 MONTGOMERY ST", street2: "FLOOR 5", city: "SAN FRANCISCO", state: "CA", zip: "94104", country: "US", company: "EasyPost", phone: "415-123-4567", }, to_address: { name: "Dr. Steve Brule", street1: "179 N Harbor Dr", city: "Redondo Beach", state: "CA", zip: "90277", country: "US", phone: "4155559999", }, parcel: { length: 8, width: 5, height: 5, weight: 5, }, }); const arrayData = shipment.save().then((s) => { return s; }); return arrayData; });