From 68c006cd33e4c84b4c341cf868621c352c6c8068 Mon Sep 17 00:00:00 2001 From: Robert Herhold Date: Tue, 14 Mar 2017 20:32:13 -0400 Subject: [PATCH] Add README for Node.js examples (#155) --- examples/nodejs/README.md | 98 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 examples/nodejs/README.md diff --git a/examples/nodejs/README.md b/examples/nodejs/README.md new file mode 100644 index 00000000..9c603cd9 --- /dev/null +++ b/examples/nodejs/README.md @@ -0,0 +1,98 @@ +# Fission Node.js Examples + +This directory contains several examples to get you started using Node.js with Fission. + +Before running any of these functions, make sure you have created a `nodejs` Fission environment: + +``` +$ fission env create --name nodejs --image fission/node-env +``` + +## Function signature + +Every Node.js function has the same basic form: + +```javascript +module.exports = async function(context) { + return { + status: 200, + body: 'Your body here', + headers: { + 'Foo': 'Bar' + } + } +} +``` + +Since it is an `async` function, you can `await` `Promise`s, as demonstrated in the `stock.js` function. + +## hello.js + +This is a basic "Hello, World!" example. It simply returns a status of `200` and text body. + +### Usage + +```bash +# Upload your function code to fission +$ fission function create --name hello --env nodejs --code hello.js + +# Map GET /hello to your new function +$ fission route create --method GET --url /hello --function hello + +# Run the function. +$ curl http://$FISSION_ROUTER/hello +Hello, world! +``` + +## hello-callback.js + +This is a basic "Hello, World!" example implemented with the legacy callback implementation. If you declare your function with two arguments (`context`, `callback`), a callback taking three arguments (`status`, `body`, `headers`) is provided. + +⚠️️ Callback support is only provided for backwards compatibility! We recommend that you use `async` functions instead. + +### Usage + +```bash +# Upload your function code to fission +$ fission function create --name hello-callback --env nodejs --code hello-callback.js + +# Map GET /hello-callback to your new function +$ fission route create --method GET --url /hello-callback --function hello-callback + +# Run the function. +$ curl http://$FISSION_ROUTER/hello-callback +Hello, world! +``` + +## stock.js + +This is a basic example of how you can easily use asynchronous requests in your functions. By default, the Node.js environment makes the [`request-promise-native`](https://github.com/request/request-promise-native) library available. In this example, the Google Finance API is used to determine when a stock was last traded. + +### Usage + +```bash +# Upload your function code to fission +$ fission function create --name stock --env nodejs --code stock.js + +# Map GET /stock to your new function +$ fission route create --method GET --url /stock --function stock + +# Run the function. +$ curl -H "Content-Type: application/json" -X POST -d '{"symbol":"AAPL"}' http://$FISSION_ROUTER/stock + +{"text":"AAPL last traded at 138.99"} +``` + +## kubeEventsSlack.js + +This example watches Kubernetes events and sends them to a Slack channel. To use this, create an incoming webhook for your Slack channel, and replace the `slackWebhookPath` in the example code. + +### Usage + +```bash +# Upload your function code to fission +$ fission fn create --name kubeEventsSlack --env nodejs --code kubeEventsSlack.js + +# Watch all services in the default namespace: +$ fission watch create --function kubeEventsSlack --type service --ns default +```