diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 312e938388..902217bde0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,6 +19,9 @@ Follow either of the two links above to access the appropriate CLA and instructions for how to sign and return it. Once we receive it, we'll be able to accept your pull requests. +## Setting Up An Environment +For instructions regarding development environment setup, please visit [the documentation](https://cloud.google.com/nodejs/docs/setup). + ## Contributing A Patch 1. Submit an issue describing your proposed change to the repo in question. diff --git a/appengine/headless-chrome/app.js b/appengine/headless-chrome/app.js index 8a98d0b904..9d3219197b 100644 --- a/appengine/headless-chrome/app.js +++ b/appengine/headless-chrome/app.js @@ -20,6 +20,27 @@ const express = require('express'); const puppeteer = require('puppeteer'); const app = express(); +let browser; + +async function init () { + // [START browser] + browser = await puppeteer.launch({ + args: ['--no-sandbox'] + }); + // [END browser] + + const server = app.listen(process.env.PORT || 8080, async err => { + if (err) { + await browser.close(); + return console.error(err); + } + const port = server.address().port; + console.info(`App listening on port ${port}`); + }); +} + +init(); + app.use(async (req, res) => { const url = req.query.url; @@ -27,25 +48,13 @@ app.use(async (req, res) => { return res.send('Please provide URL as GET parameter, for example: ?url=https://example.com'); } - // [START browser] - const browser = await puppeteer.launch({ - args: ['--no-sandbox'] - }); - // [END browser] - const page = await browser.newPage(); + let page = await browser.newPage(); await page.goto(url); const imageBuffer = await page.screenshot(); - browser.close(); res.set('Content-Type', 'image/png'); res.send(imageBuffer); }); - -const server = app.listen(process.env.PORT || 8080, err => { - if (err) return console.error(err); - const port = server.address().port; - console.info(`App listening on port ${port}`); -}); // [END full_sample] module.exports = app; diff --git a/auth/auth.js b/auth/auth.js index c27163fec4..343e6caa00 100644 --- a/auth/auth.js +++ b/auth/auth.js @@ -86,7 +86,7 @@ const cli = require(`yargs`) ) .command( `auth-cloud-explicit`, - `Loads credentials implicitly.`, + `Loads credentials explicitly.`, {}, authCloudExplicit ) diff --git a/functions/sql/index.js b/functions/sql/index.js index dff0b2d976..e5df892375 100644 --- a/functions/sql/index.js +++ b/functions/sql/index.js @@ -50,9 +50,18 @@ if (process.env.NODE_ENV === 'production') { mysqlConfig.socketPath = `/cloudsql/${connectionName}`; } -const mysqlPool = mysql.createPool(mysqlConfig); +// Connection pools reuse connections between invocations, +// and handle dropped or expired connections automatically. +let mysqlPool; exports.mysqlDemo = (req, res) => { + // Initialize the pool lazily, in case SQL access isn't needed for this + // GCF instance. Doing so minimizes the number of active SQL connections, + // which helps keep your GCF instances under SQL connection limits. + if (!mysqlPool) { + mysqlPool = mysql.createPool(mysqlConfig); + } + mysqlPool.query('SELECT NOW() AS now', (err, results) => { if (err) { console.error(err); @@ -61,6 +70,9 @@ exports.mysqlDemo = (req, res) => { res.send(JSON.stringify(results)); } }); + + // Close any SQL resources that were declared inside this function. + // Keep any declared in global scope (e.g. mysqlPool) for later reuse. }; // [END functions_sql_mysql] @@ -76,9 +88,18 @@ if (process.env.NODE_ENV === 'production') { pgConfig.socketPath = `/cloudsql/${connectionName}`; } -const pgPool = new pg.Pool(pgConfig); +// Connection pools reuse connections between invocations, +// and handle dropped or expired connections automatically. +let pgPool; exports.postgresDemo = (req, res) => { + // Initialize the pool lazily, in case SQL access isn't needed for this + // GCF instance. Doing so minimizes the number of active SQL connections, + // which helps keep your GCF instances under SQL connection limits. + if (!pgPool) { + pgPool = new pg.Pool(pgConfig); + } + pgPool.query('SELECT NOW() as now', (err, results) => { if (err) { console.error(err); @@ -87,5 +108,8 @@ exports.postgresDemo = (req, res) => { res.send(JSON.stringify(results)); } }); + + // Close any SQL resources that were declared inside this function. + // Keep any declared in global scope (e.g. mysqlPool) for later reuse. }; // [END functions_sql_postgres]