使用 Cloud Datastore

您可以使用 Google Cloud Datastore 儲存來自 App Engine 應用程式的應用程式資料。Cloud Datastore 是為了協助應用程式開發作業打造的資料庫,能夠自動調整資源配置並具有卓越效能。

本文件說明如何透過 App Engine 應用程式中的 Cloud Datastore,使用 Google Cloud 用戶端程式庫儲存和擷取資料。

必備條件和設定

請依照 App Engine 上適用於 Node.js 的「Hello, World!」中的操作說明來設定您的環境和專案,並進一步瞭解如何在 App Engine 中建構 Node.js 應用程式。請記下並儲存您的專案 ID,因為您需要這些資訊才能執行本文件所描述的範例應用程式。

複製存放區

下載 (複製) 此範例:

git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples/
cd nodejs-docs-samples/appengine/datastore

編輯專案設定並設定依附元件

package.json 中將 @google-cloud/datastore 設定為依附元件。此依附元件將提供要在 Cloud Datastore 中使用的函式。

{
  "name": "appengine-datastore",
  "description": "Sample for Google Cloud Datastore on Google App Engine.",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "repository": {
    "type": "git",
    "url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git"
  },
  "engines": {
    "node": ">=8"
  },
  "scripts": {
    "start": "node app.js",
    "system-test": "repo-tools test app",
    "test": "npm run system-test"
  },
  "dependencies": {
    "@google-cloud/datastore": "^3.0.0",
    "express": "^4.16.4"
  },
  "devDependencies": {
    "@google-cloud/nodejs-repo-tools": "^3.0.0"
  },
  "cloud-repo-tools": {
    "test": {
      "app": {
        "msg": "Last 10 visits:"
      }
    },
    "requiresKeyFile": true,
    "requiresProjectId": true
  }
}

應用程式的程式碼

範例應用程式會記錄、擷取及顯示訪客 IP。您可以看到記錄項目是簡單的兩欄類別,其中註明類型 visit,並使用 Dataset save 指令儲存於 Cloud Datastore 中。然後,系統會使用 Dataset runQuery 指令,以遞減順序擷取最近的十筆造訪資料。

'use strict';

const express = require('express');
const crypto = require('crypto');

const app = express();
app.enable('trust proxy');

// By default, the client will authenticate using the service account file
// specified by the GOOGLE_APPLICATION_CREDENTIALS environment variable and use
// the project specified by the GOOGLE_CLOUD_PROJECT environment variable. See
// https://github.com/GoogleCloudPlatform/google-cloud-node/blob/master/docs/authentication.md
// These environment variables are set automatically on Google App Engine
const {Datastore} = require('@google-cloud/datastore');

// Instantiate a datastore client
const datastore = new Datastore();

/**
 * Insert a visit record into the database.
 *
 * @param {object} visit The visit record to insert.
 */
function insertVisit(visit) {
  return datastore.save({
    key: datastore.key('visit'),
    data: visit,
  });
}

/**
 * Retrieve the latest 10 visit records from the database.
 */
function getVisits() {
  const query = datastore
    .createQuery('visit')
    .order('timestamp', {descending: true})
    .limit(10);

  return datastore.runQuery(query);
}

app.get('/', async (req, res, next) => {
  // Create a visit record to be stored in the database
  const visit = {
    timestamp: new Date(),
    // Store a hash of the visitor's ip address
    userIp: crypto
      .createHash('sha256')
      .update(req.ip)
      .digest('hex')
      .substr(0, 7),
  };

  try {
    await insertVisit(visit);
    const results = await getVisits();
    const entities = results[0];
    const visits = entities.map(
      entity => `Time: ${entity.timestamp}, AddrHash: ${entity.userIp}`
    );
    res
      .status(200)
      .set('Content-Type', 'text/plain')
      .send(`Last 10 visits:\n${visits.join('\n')}`)
      .end();
  } catch (error) {
    next(error);
  }
});

const PORT = process.env.PORT || 8080;
app.listen(process.env.PORT || 8080, () => {
  console.log(`App listening on port ${PORT}`);
  console.log('Press Ctrl+C to quit.');
});

使用 index.yaml 檔案

範例應用程式會執行簡單的查詢。更精細的 Datastore 查詢作業需要使用一或多個索引,因此您必須在 index.yaml 檔案中指定這些索引,再與應用程式一併上傳。這個檔案可透過手動方式建立,或是在本機上測試應用程式時自動產生。

本機測試

如果需要在本機上開發及測試您的應用程式,可以使用 Cloud Datastore 模擬器

瞭解詳情

如需 Cloud Datastore 的完整資訊,包括最佳化與概念,請參閱 Cloud Datastore 說明文件

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
App Engine standard environment for Node.js docs