Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase Function returns 400 from get request

My local function works fine running on

firebase serve --only functions

but once it is deployed to the cloud, I cannot make the same get request to it, using postman. I get the following error on stackdriver: Unexpected token u in JSON at position 0 at JSON.parse, and my request returns the following: 400. That’s an error.Your client has issued a malformed or illegal request. That’s all we know.

The Data I send in both local and firebase is a GET request of type application/json with a body of: { "data": { "Celebrity_A": "Brad Pitt", "Celebrity_B": "Angelina Jolie" } }

What request is it the firebase function expecting remotely, compared to on local?

Below is the start of my function:

// Main index.ts
exports.funct = functions.https.onRequest(functexp)

// functexp file
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import * as _request from 'request';
const serviceAccount = require('./credentials.json');
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount)
});
const db = admin.firestore();

export function functexp(request, response) {
    console.log(`request`);
    console.log(request);
    let celebName_A = null;
    let celebName_B = null;
    if(request !== undefined){
        celebName_A = request.body.data['Celebrity_A'];
        celebName_B = request.body.data['Celebrity_B'];
        console.log(`celebA is ${celebName_A}`)
    } etc...
}
like image 232
Tristram Tolliday Avatar asked Dec 11 '18 17:12

Tristram Tolliday


1 Answers

Try to send your request as POST method, you don't see GET requests with the body very often, and that's why POST is more secure, it's never cached and most importantly there's no size limit, maybe that's the reason cause your GET request is not working.

Hope it helps.

like image 192
Karlo A. López Avatar answered Sep 30 '22 06:09

Karlo A. López