【问题标题】:Express GET returning an empty bracketExpress GET 返回一个空括号
【发布时间】:2022-01-09 03:58:31
【问题描述】:

我正在尝试使用 Google Sheets API 做一个 API。但是在我的应用程序中,我总是得到一个空数组作为响应。这些是我的代码:

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

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
};

如果我在控制台记录响应,代码可以工作,但是当我向 /trabajador/obtener 发出 GET 请愿时,返回“{}”

我希望响应是一个 json,其中包含从对 Google Sheet 的请求中获得的数据

我想这是因为它正在返回一个承诺,但我该如何解决呢?

【问题讨论】:

  • 首先,尝试控制台记录 const 响应。然后你会看到你得到了什么作为对你的请求的回应。如果您正在获取数据,我建议您将您的函数用作中间件。
  • 当然,如果我在控制台登录,我会得到如下信息: GET /trabajador/obtener 200 6.267 ms - 2 [ [ 'NOMBRE' ], ] 但我不知道如何发送响应

标签: node.js express google-api-nodejs-client


【解决方案1】:

我建议您将函数用作中间件,因为它们往往会重复。

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

在 index.routes.js 中:

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

【讨论】:

    【解决方案2】:

    正如@jkalandarov 所说,作为中间件的功能可以正常工作!

    我只是更改了一些小东西以使其正常工作:

    index.routes.js 从“快递”导入{路由器};

    const router = Router();
    
    import obtenertrabajadores from "../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", obtenertrabajadores, (req, res) => {
        const response = req.response
        res.json(response)
    });
    
    export default router;
    

    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
    

    【讨论】:

      猜你喜欢
      • 2016-07-05
      • 2021-07-21
      • 1970-01-01
      • 2022-12-03
      • 2022-06-10
      • 2016-04-30
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多