Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Express GET returning an empty bracket

I’m trying to do an API using the Google Sheets API. But in my application I always get an empty array as response. These are my codes:

index.routes.js

import { Router } from "express";

const router = Router();

const funciones = require("../functions/index.functions.js");

router.get("/", (req, res) => {
  res.render("index.hbs");
});

router.post("/trabajador/agregar", (req, res) => {
  console.log(req.body);

  res.send("Trabajador Agregado");
});

router.get("/trabajador/obtener", (req, res) => {
  res.send(funciones.obtenertrabajadores());
});

export default router;

index.functions.js

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

const {google} = require('googleapis');
const sheets = google.sheets('v4');

async function obtenertrabajadores () {
  const authClient = await authorize();
  const request = {
    // ID DE LA HOJA
    spreadsheetId: 'ID',
        
    // RANGO
    range: 'C1:C',

    // UNFORMATTED_VALUE.
    valueRenderOption: 'UNFORMATTED_VALUE', 

    // SERIAL_NUMBER
    dateTimeRenderOption: 'SERIAL_NUMBER',

    auth: authClient,
  };

  try {
    const response = (await sheets.spreadsheets.values.get(request)).data;
    return JSON.stringify(response, null, 2);
  } catch (err) {
    console.error(err);
  }
}

async function authorize() {
  let authClient = 'AuthKey';

  if (authClient == null) {
    throw Error('authentication failed');
  }

  return authClient;
}

module.exports = {
    obtenertrabajadores: obtenertrabajadores
};

If I console log the response, the code works, but when I make the GET petition to /trabajador/obtener, returns ‘{}’

I would like the response to be a json with the data obtained from the request to Google Sheet

I suppose it is because it is returning a promise, but how can I fix it?

>Solution :

I suggest you use functions as middleware since they tend to repeat.

in index.functions.js:

const {google} = require('googleapis');
const sheets = google.sheets('v4');

async function obtenertrabajadores (req, res, next) {
  const authClient = await authorize();
  const request = {
    // ID DE LA HOJA
    spreadsheetId: 'ID',
        
    // RANGO
    range: 'C1:C',

    // UNFORMATTED_VALUE.
    valueRenderOption: 'UNFORMATTED_VALUE', 

    // SERIAL_NUMBER
    dateTimeRenderOption: 'SERIAL_NUMBER',

    auth: authClient,
  };

  try {
    const response = (await sheets.spreadsheets.values.get(request)).data;
    req.response = response //Appending response to req so that you can catch it later
    return
    next()
  } catch (err) {
    console.error(err);
  }
}

async function authorize() {
  let authClient = 'AuthKey';

  if (authClient == null) {
    throw Error('authentication failed');
  }

  return authClient;
}

module.exports = obtenertrabajadores

in index.routes.js:

router.get("/trabajador/obtener", obtenertrabajadores, (req, res) => {
  const response = req.response
  res.json(response)
});
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading