appengine/datastore/app.js (52 lines of code) (raw):

// Copyright 2017 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // [START gae_flex_datastore_app] '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({ projectId: 'long-door-651', }); /** * 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 = parseInt(parseInt(process.env.PORT)) || 8080; app.listen(PORT, () => { console.log(`App listening on port ${PORT}`); console.log('Press Ctrl+C to quit.'); }); // [END gae_flex_datastore_app] module.exports = app;