Skip to content

Commit

Permalink
New samples for Cloud Functions docs (#132)
Browse files Browse the repository at this point in the history
* Add HTTP Cloud Function.

* Add more GCF http samples.

* Change string

* Added promise sample.

* Add background functions tests.

* Added more GCF tests.

* Fix readme and make test work in Node 0.12

* Changed helloworld to camel case (#133)

* Changed helloworld to camel case (#134)

* Add BigQuery processing to SendGrid sample (still needs more tests).

* Add basic auth check.

* Add fix for property names

* Make fixNames method recursive.

* Changed helloworld to camel case (#136)

* Add small helloGET sample.

* Tweak some hello world samples.

* Finish sendgrid unit tests.

* Add missing readme link.

* Update comment.

* Make sure a response gets sent.

* Made requested fixes.

* Final fixes.

* Couple fixes to fix test flakiness.
  • Loading branch information
jmdobry authored Jun 23, 2016
1 parent 247e006 commit a6c2db5
Show file tree
Hide file tree
Showing 29 changed files with 1,555 additions and 365 deletions.
6 changes: 5 additions & 1 deletion functions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,14 @@ environment.
## Samples

* [Hello World](helloworld/)
* [Background](background/)
* [Callbacks](messages/)
* [Cloud Storage](gcs/)
* [Cloud Datastore](datastore/)
* [Cloud Pub/Sub](pubsub/)
* [Dependencies](uid/)
* [Dependencies](uuid/)
* [HTTP](http/)
* [Logging](log/)
* [Modules](module/)
* [OCR (Optical Character Recognition)](ocr/)
* [SendGrid](sendgrid/)
File renamed without changes.
50 changes: 50 additions & 0 deletions functions/background/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Copyright 2016, Google, Inc.
// 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.

'use strict';

// [START helloworld]
/**
* Background Cloud Function.
*
* @param {Object} context Cloud Function context.
* @param {Object} data Request data, provided by a trigger.
* @param {string} data.message Message, provided by the trigger.
*/
exports.helloWorld = function helloWorld (context, data) {
if (data.message === undefined) {
// This is an error case, "message" is required
context.failure('No message defined!');
} else {
// Everything is ok
console.log(data.message);
context.success();
}
};
// [END helloworld]

// [START helloPromise]
var request = require('request-promise');

/**
* Background Cloud Function that returns a Promise.
*
* @param {Object} data Request data, provided by a trigger.
* @returns {Promise}
*/
exports.helloPromise = function helloPromise (data) {
return request({
uri: data.endpoint
});
};
// [END helloPromise]
15 changes: 15 additions & 0 deletions functions/background/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "nodejs-docs-samples-functions",
"description": "Node.js samples found on https://cloud.google.com",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"repository": {
"type": "git",
"url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git"
},
"dependencies": {
"request-promise": "^3.0.0"
}
}
73 changes: 71 additions & 2 deletions functions/helloworld/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,76 @@
'use strict';

// [START helloworld]
exports.helloworld = function (context, data) {
context.success('Hello World!');
/**
* Cloud Function.
*
* @param {Object} context Cloud Function context.
* @param {Object} data Request data, provided by a trigger.
*/
exports.helloWorld = function helloWorld (context, data) {
console.log('My Cloud Function: ' + data.message);
context.success();
};
// [END helloworld]

// [START helloGET]
/**
* HTTP Cloud Function.
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
exports.helloGET = function helloGET (req, res) {
res.send('Hello World!');
};
// [END helloGET]

// [START helloHttp]
/**
* HTTP Cloud Function.
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
exports.helloHttp = function helloHttp (req, res) {
res.send('Hello ' + (req.body.name || 'World') + '!');
};
// [END helloHttp]

// [START helloBackground]
/**
* Background Cloud Function.
*
* @param {Object} context Cloud Function context.
* @param {Object} data Request data, provided by a trigger.
*/
exports.helloBackground = function helloBackground (context, data) {
context.success('Hello ' + (data.name || 'World') + '!');
};
// [END helloBackground]

// [START helloPubSub]
/**
* Background Cloud Function to be triggered by Pub/Sub.
*
* @param {Object} context Cloud Function context.
* @param {Object} data Request data, provided by a Pub/Sub trigger.
*/
exports.helloPubSub = function helloPubSub (context, data) {
console.log('Hello ' + (data.name || 'World') + '!');
context.success();
};
// [END helloPubSub]

// [START helloGCS]
/**
* Background Cloud Function to be triggered by Cloud Storage.
*
* @param {Object} context Cloud Function context.
* @param {Object} data Request data, provided by a Cloud Storage trigger.
*/
exports.helloGCS = function helloGCS (context, data) {
console.log('Hello ' + (data.name || 'World') + '!');
context.success();
};
// [END helloGCS]
35 changes: 35 additions & 0 deletions functions/http/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<img src="https://avatars2.githubusercontent.com/u/2810941?v=3&s=96" alt="Google Cloud Platform logo" title="Google Cloud Platform" align="right" height="96" width="96"/>

# Google Cloud Functions HTTP sample

This recipe shows you how to respond to HTTP requests with a Cloud Function.

View the [source code][code].

[code]: index.js

## Deploy and Test

1. Follow the [Cloud Functions quickstart guide][quickstart] to setup Cloud
Functions for your project.

1. Clone this repository:

git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
cd nodejs-docs-samples/functions/http

1. Create a Cloud Storage Bucket to stage our deployment:

gsutil mb gs://[YOUR_BUCKET_NAME]

* Replace `[YOUR_BUCKET_NAME]` with the name of your Cloud Storage Bucket.

1. Deploy the "helloGET" function with an HTTP trigger

gcloud alpha functions deploy publish --bucket [YOUR_BUCKET_NAME] --trigger-http

1. Call the "helloGET" function:

curl https://[YOUR_PROJECT_REGION].[YOUR_PROJECT_ID].cloudfunctions.net/helloGET

[quickstart]: https://cloud.google.com/functions/quickstart
105 changes: 105 additions & 0 deletions functions/http/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
// Copyright 2016, Google, Inc.
// 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.

'use strict';

// [START helloworld]
/**
* Responds to any HTTP request that can provide a "message" field in the body.
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
exports.helloWorld = function helloWorld (req, res) {
if (req.body.message === undefined) {
// This is an error case, as "message" is required
res.status(400).send('No message defined!');
} else {
// Everything is ok
console.log(req.body.message);
res.status(200).end();
}
};
// [END helloworld]

// [START helloHttp]
function handleGET (req, res) {
// Do something with the GET request
res.status(200).send('Hello World!');
}

function handlePUT (req, res) {
// Do something with the PUT request
res.status(403).send('Forbidden!');
}

/**
* Responds to a GET request with "Hello World!". Forbids a PUT request.
*
* @example
* gcloud alpha functions call helloHttp
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
exports.helloHttp = function helloHttp (req, res) {
switch (req.method) {
case 'GET':
handleGET(req, res);
break;
case 'PUT':
handlePUT(req, res);
break;
default:
res.status(500).send({ error: 'Something blew up!' });
break;
}
};
// [END helloHttp]

// [START helloContent]
/**
* Responds to any HTTP request that can provide a "message" field in the body.
*
* @param {Object} req Cloud Function request context.
* @param {Object} res Cloud Function response context.
*/
exports.helloContent = function helloContent (req, res) {
var name;

console.log(req.get('content-type'));
switch (req.get('content-type')) {
// '{"name":"John"}'
case 'application/json':
name = req.body.name;
break;

// 'John', stored in a Buffer
case 'application/octet-stream':
name = req.body.toString(); // Convert buffer to a string
break;

// 'John'
case 'text/plain':
name = req.body;
break;

// 'name=John'
case 'application/x-www-form-urlencoded':
name = req.body.name;
break;
}

res.status(200).send('Hello ' + (name || 'World') + '!');
};
// [END helloContent]
49 changes: 0 additions & 49 deletions functions/log2/README.md

This file was deleted.

28 changes: 0 additions & 28 deletions functions/log2/index.js

This file was deleted.

Loading

0 comments on commit a6c2db5

Please sign in to comment.