gpt4 book ai didi

javascript - 访问 Express Route 中的 promise 值

转载 作者:行者123 更新时间:2023-11-30 14:26:18 25 4
gpt4 key购买 nike

所以基本上我试图从单个 Google SpreadSheet 获取工作表列表(例如工作表 1、工作表 2)并将其显示在我的前端。我已经启动并运行了一个 Node.js 服务器,并且可以毫无问题地从 Google 表格在后端获取数据。

我想做的是在呈现时将我的数组发送到我的页面。目前我可以在我的 console.log 中获取数据,但我的页面不会呈现。

index.js//服务器

const express = require('express');

const path = require('path');

const myGenerator = require('./app/myGenerator.js')

const app = express();


app.set('view engine', 'pug');
app.set('views', path.join(__dirname, 'views'));
app.use(express.static('./app'));

app.get('/home', async (req, res, next) => {
Promise.all([
myGenerator.GetAllSheets()
]).then((value) => {
res.render('home', { title: 'Hey', map1: value})
})
});

app.listen(3000, () => console.log('Example app listening on port 3000!'));

我的生成器.js

module.exports = {
GetAllSheets: function() {
return new Promise((resolve, reject) => {

const googleSheetID = "REMOVED";

// GOOGLE SHEETS CODE
// Load client secrets from a local file.
fs.readFile(__dirname + '/client_secret.json', (err, content) => {
if (err) return console.log('Error loading client secret file:', err);
// Authorize a client with credentials, then call the Google Sheets API.
GoogleFunctions.authorize(JSON.parse(content), getData);
});

function getData(auth) {
const sheets = google.sheets({version: 'v4', auth});
sheets.spreadsheets.get({
spreadsheetId: `${googleSheetID}`
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
const rows = res.data.sheets;
var map1 = rows.map(function(sheet) {
return sheet.properties.title
})
console.log(map1);
return map1;
});
}
})
}
}

home.pug// View

doctype html
html(lang='en')
head
meta(charset='UTF-8') rel='stylesheet')
body
.container
p The mysterious array should be here -> #{map1}

如果有人能指出正确的方向,我将不胜感激。干杯

最佳答案

请记住,当使用 new Promiserejectresolve 时,否则您最终会得到一个永远不会结束的 Promise。

下面是修复后的代码。

我在我更改的 3 个地方放置了评论。

此外,在你的路由中捕获错误也是个好主意,你可以返回一个500错误等。

GetAllSheets: function() {
return new Promise((resolve, reject) => {
const googleSheetID = "REMOVED";
fs.readFile(__dirname + '/client_secret.json', (err, content) => {
//remember to also reject promise if error.
if (err) return reject('Error loading client secret file:', err);
GoogleFunctions.authorize(JSON.parse(content), getData);
});

function getData(auth) {
const sheets = google.sheets({version: 'v4', auth});
sheets.spreadsheets.get({
spreadsheetId: `${googleSheetID}`
}, (err, res) => {
//again if we have error, reject
if (err) return reject('The API returned an error: ' + err);
const rows = res.data.sheets;
var map1 = rows.map(function(sheet) {
return sheet.properties.title
})
//lets return our result
return resolve(map1);
});
}
})
}

关于javascript - 访问 Express Route 中的 promise 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51895174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com