我正在嘗試使用 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 的請求中獲得的資料
我想這是因為它正在回傳一個承諾,但我該如何解決呢?
uj5u.com熱心網友回復:
我建議您將函式用作中間件,因為它們往往會重復。
在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)
});
uj5u.com熱心網友回復:
正如@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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/406232.html
標籤:
