From 74e05ba3a1a0bad8fe274b92f1b52fdae0dc8dd5 Mon Sep 17 00:00:00 2001 From: svicenteruiz <33637375+svicenteruiz@users.noreply.github.com> Date: Wed, 15 Nov 2017 00:33:41 +0100 Subject: [PATCH] created weather.js in node.js examples, modified README.md (#394) --- examples/nodejs/README.md | 21 +++++++++++++++++++- examples/nodejs/weather.js | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 examples/nodejs/weather.js diff --git a/examples/nodejs/README.md b/examples/nodejs/README.md index 37298861..11a2533a 100644 --- a/examples/nodejs/README.md +++ b/examples/nodejs/README.md @@ -82,7 +82,7 @@ This is a basic example of how you can easily use asynchronous requests in your $ 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 +$ fission route create --method POST --url /stock --function stock # Run the function. $ curl -H "Content-Type: application/json" -X POST -d '{"symbol":"AAPL"}' http://$FISSION_ROUTER/stock @@ -103,3 +103,22 @@ $ fission fn create --name kubeEventsSlack --env nodejs --code kubeEventsSlack.j # Watch all services in the default namespace: $ fission watch create --function kubeEventsSlack --type service --ns default ``` + +## weather.js + +In this example, the Yahoo Weather API is used to current weather at a given location. + +### Usage + +```bash +# Upload your function code to fission +$ fission function create --name weather --env nodejs --code weather.js + +# Map GET /stock to your new function +$ fission route create --method POST --url /weather --function weather + +# Run the function. +$ curl -H "Content-Type: application/json" -X POST -d '{"location":"Sieteiglesias, Spain"}' http://$FISSION_ROUTER/weather + +{"text":"It is 2 celsius degrees in Sieteiglesias, Spain and Mostly Clear"} +``` \ No newline at end of file diff --git a/examples/nodejs/weather.js b/examples/nodejs/weather.js new file mode 100644 index 00000000..2f824fc8 --- /dev/null +++ b/examples/nodejs/weather.js @@ -0,0 +1,40 @@ +'use strict'; + +const rp = require('request-promise-native'); + +module.exports = async function (context) { + const stringBody = JSON.stringify(context.request.body); + const body = JSON.parse(stringBody); + const location = body.location; + + if (!location) { + return { + status: 400, + body: { + text: 'You must provide a location.' + } + }; + } + + try { + const response = await rp(`https://query.yahooapis.com/v1/public/yql?q=select item.condition from weather.forecast where woeid in (select woeid from geo.places(1) where text="${location}") and u="c"&format=json`); + const condition = JSON.parse(response).query.results.channel.item.condition; + const text = condition.text; + const temperature = condition.temp; + return { + status: 200, + body: { + text: `It is ${temperature} celsius degrees in ${location} and ${text}` + }, + headers: { + 'Content-Type': 'application/json' + } + }; + } catch (e) { + console.error(e); + return { + status: 500, + body: e + }; + } +} \ No newline at end of file