I am trying to make 2 fetch requests inside a function which runs periodically.
exports.scheduledPay = functions.pubsub.schedule('1 of month 07:00').timeZone('America/New_York').onRun((context) => { //1. fetch for getting token ... //2. fetch for making Paypal batch request using that token fetch("https://api.sandbox.paypal.com/v1/payments/payouts", { method: 'POST', headers: {"Authorization":"Basic QWJ4aUhTaWM5cmp2NUpQdEV2WUhaMi1hWmVySWFoTHdDVDEza004UURLY3RMWGtXN3lpTFRfVGpFVllVMXB5NFhKcGtxXzdYSVpYRmhkaFc6RVBUbUVZSWg2OE1FVG9FSjEyT0lHdzFKWkFGNTVza2Q2SjNiRmpLYkxMTEJiOTY3akRhQkdRREt1S29yTWN4amZ3Rm00X0VCa1dvUzJkejn="}, body: {"grant_type":"client_credentials"}, redirect: 'follow' }) .then(response => {return response.text()}) .then(result => {console.log(result); return null; }) .catch(error => console.log('error', error)); }
However, I keep on getting this error.
ReferenceError: fetch is not defined at exports.scheduledAward.functions.pubsub.schedule.timeZone.onRun (/workspace/index.js:230:5) at cloudFunction (/workspace/node_modules/firebase-functions/lib/cloud-functions.js:130:23) at Promise.resolve.then (/layers/google.nodejs.functions-framework/functions-framework/node_modules/@google-cloud/functions-framework/build/src/invoker.js:199:28) at process._tickCallback (internal/process/next_tick.js:68:7)
Advertisement
Answer
Cloud Functions run in a nodejs JavaScript environment. This is very different than browser JavaScript environments. You won’t have access to the fetch()
function that browsers provide – that explains the error message.
What you will need to do instead is use some other type of HTTP client library built for nodejs. There are a lot of popular options out there, and I recommend doing a web search to find one.