Utiliza Cloud Datastore

Puedes utilizar Google Cloud Datastore para almacenar los datos de tu app de App Engine. Cloud Datastore es una base de datos compilada para lograr un ajuste de escala automático, un alto rendimiento y un desarrollo de aplicación sencillo.

En este documento, se describe cómo utilizar la biblioteca cliente de Google Cloud para almacenar y recuperar datos mediante Cloud Datastore en una app de App Engine.

Requisitos previos y configuración

Sigue las instrucciones que se detallan en "¡Hola, mundo!" para Node.js en App Engine a fin de configurar tu entorno y tu proyecto, y entender cómo se estructuran las aplicaciones de Node.js en App Engine. Anota y guarda tu ID del proyecto, ya que lo necesitarás para ejecutar la aplicación de muestra que se describe en este documento.

Clona el repositorio

Descarga (clona) la muestra:

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

Edita la configuración del proyecto y ajusta las dependencias

En package.json, configura @google-cloud/datastore como dependencia, que proporciona las funciones para utilizar 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.0.0"
  },
  "scripts": {
    "start": "node app.js",
    "system-test": "repo-tools test app",
    "test": "npm run system-test"
  },
  "dependencies": {
    "@google-cloud/datastore": "^4.0.0",
    "express": "^4.16.4"
  },
  "devDependencies": {
    "@google-cloud/nodejs-repo-tools": "^3.3.0"
  },
  "cloud-repo-tools": {
    "test": {
      "app": {
        "msg": "Last 10 visits:"
      }
    },
    "requiresKeyFile": true,
    "requiresProjectId": true
  }
}

Código de la aplicación

La aplicación de ejemplo registra, recupera y muestra los IP de los visitantes. Puedes ver que una entrada de registro es una clase simple de dos campos que recibe el tipo visit y se guarda en Cloud Datastore con el comando save del conjunto de datos. Luego, se recuperarán las diez últimas visitas más recientes en orden descendente con el comando runQuery del conjunto de datos.

'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.
 */
const insertVisit = visit => {
  return datastore.save({
    key: datastore.key('visit'),
    data: visit,
  });
};

/**
 * Retrieve the latest 10 visit records from the database.
 */
const 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 [entities] = await getVisits();
    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.');
});

Usa archivos index.yaml

La app de muestra realiza consultas sencillas. Las consultas de Datastore más elaboradas requieren uno o más índices, que debes especificar en un archivo index.yaml, el cual subes después junto con tu aplicación. Este archivo se puede crear de forma manual o generarse de manera automática mientras realizas una prueba local de la aplicación.

Pruebas locales

Si necesitas desarrollar y probar la aplicación de forma local, puedes utilizar el emulador de Cloud Datastore.

Más información

Para obtener toda la información sobre Cloud Datastore, incluidos los conceptos y las optimizaciones, consulta la documentación de Cloud Datastore.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación del entorno estándar de App Engine para Node.js