Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New samples for Cloud Functions docs #132

Merged
merged 23 commits into from
Jun 23, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's a background function?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any function that's triggered, without the "triggerer" waiting for a response. This will be thoroughly documented in the docs.

*
* @param {Object} context Cloud Function context.
* @param {Object} data Request data, provided by a trigger.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Document that data expects a message property.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

* @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) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do we have a separate background example if we already have one here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are multiple background samples in the docs. Once the docs are published, you'll see somewhat of a mapping between sample folders here and pages in the docs.

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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does this data look like?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like whatever the user publishes to the topic. data is completely untyped.

*/
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