SheetSQL - Google Spreadsheet as a Database 使用 Nodejs 实现

发布于 1周前 作者 phonegap100 来自 nodejs/Nestjs

SheetSQL - Google Spreadsheet as a Database 使用 Nodejs 实现

Github

之前经常需要和运营同事打交道,将她们 Google Spreadsheet 上维护的内容映射到数据库里,如果数据变动比较频繁,这种需求又要单独做成一个运营后台,非常麻烦。与此同时,她们也会需要看到一些 sheets 上数据在生产上的反馈,比如每条内容的点击量。

但如果 Spreadsheet 自身就是一个可以增删改查的数据库,运营可以编辑她自己的内容,程序也可以反过来写入一些反馈数据到 sheets 中的其他列中去。这样完全不需要什么运营后台,对开发和运营都是个好事。所以写了这个 SheetSQL 的库,在很多数据量不大,实时性要求不那么高的场景非常适合。

Example

const db = new Database({
  db: '1ya2Tl2ev9M80xYwspv7FJaoWq0oVOMBk3VF0f0MXv2s',
  table: 'Sheet1', // optional, default = Sheet1
  keyFile: './google-serviceaccount.json',
  cacheTimeoutMs: 5000, // optional, default = 5000
})

// load schema and data from google spreadsheet await db.load()

// insert multiple documents let docs = await db.insert([ { name: ‘joway’, age: 18, }, ])

// find documents and update them docs = await db.update( { name: ‘joway’, }, { age: 100, }, )

// find documents docs = await db.find({ name: ‘joway’, })

// find all documents docs = await db.find({})

// find documents and remove them docs = await db.remove({ name: ‘joway’, })


2 回复

当然,下面是一个简单的示例,展示如何使用 Node.js 和 Google Sheets API 将 Google Spreadsheet 用作数据库。这个示例假定你已经安装了 googleapis 包,并且已经设置了 Google Cloud 项目和 OAuth 2.0 凭证。

首先,安装 googleapis 包:

npm install googleapis

然后,你可以使用以下代码来读取和写入 Google Sheets:

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

// 认证部分,使用 OAuth2 客户端
const auth = new google.auth.OAuth2(
  YOUR_CLIENT_ID,
  YOUR_CLIENT_SECRET,
  YOUR_REDIRECT_URI
);
auth.setCredentials({
  access_token: YOUR_ACCESS_TOKEN,
  refresh_token: YOUR_REFRESH_TOKEN,
  scope: 'https://www.googleapis.com/auth/spreadsheets',
  token_type: 'Bearer',
  expiry_date: YOUR_EXPIRY_DATE,
});

// 读取数据
sheets.spreadsheets.values.get({
  spreadsheetId: 'YOUR_SPREADSHEET_ID',
  range: 'Sheet1!A1:Z',
  auth: auth,
}, (err, res) => {
  if (err) throw err;
  console.log(res.data.values);
});

// 写入数据
const resource = {
  values: [['New', 'Data', 'Here']],
};
sheets.spreadsheets.values.update({
  spreadsheetId: 'YOUR_SPREADSHEET_ID',
  range: 'Sheet1!A1:C1',
  valueInputOption: 'RAW',
  resource: resource,
  auth: auth,
}, (err, res) => {
  if (err) throw err;
  console.log('Data written');
});

请确保替换 YOUR_CLIENT_IDYOUR_CLIENT_SECRETYOUR_REDIRECT_URIYOUR_ACCESS_TOKENYOUR_REFRESH_TOKENYOUR_EXPIRY_DATEYOUR_SPREADSHEET_ID 为实际的值。

回到顶部