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