Upgrade node environment to Node.js 7.6.0+ (#151)

Upgrades the node environment to NodeJS 7.6.0.  Functions can now use async/await and promises; they can return a promise instead of using a callback.  The change preserves compatibility with the callback style.  

* Upgrade node environment to Node.js 7.6.0+

* Bump package version

* Preserve compatibility for callbacks

* Cleanup

* Re-add hello callback example

* Make sure not returning won't blow everything up

* Update stock example with request promise
This commit is contained in:
Robert Herhold
2017-03-14 16:00:26 -07:00
committed by Soam Vasani
parent e1cb5f6e09
commit 9bdaf3c74e
9 changed files with 112 additions and 76 deletions
+1
View File
@@ -0,0 +1 @@
node_modules/
+1 -1
View File
@@ -1,6 +1,6 @@
# A docker image for the func container.
FROM node:4-onbuild
FROM node:7-onbuild
ADD server.js /usr/src/app/server.js
+23 -24
View File
@@ -1,27 +1,26 @@
{
"name": "fission-nodejs-runtime",
"version": "0.0.0",
"author": "Soam Vasani",
"contributors": [
{
"name": "Soam Vasani",
"email": "soamvasani@platform9.com"
}
],
"description": "NodeJS run container for the fission framework",
"engines": {
"node": ">=4.2.2"
},
"dependencies": {
"express": "",
"minimist": "",
"body-parser": "",
"morgan": "",
"co": "~4.6.0",
"request": "",
"request-promise": "^1.0.2",
"mz": "~2.1.0",
"underscore": ">=1.8.3"
"name": "fission-nodejs-runtime",
"version": "0.1.0",
"author": "Soam Vasani",
"contributors": [
{
"name": "Soam Vasani",
"email": "soamvasani@platform9.com"
}
],
"description": "NodeJS run container for the fission framework",
"engines": {
"node": ">=7.6.0"
},
"dependencies": {
"body-parser": "",
"co": "~4.6.0",
"express": "",
"minimist": "",
"morgan": "",
"mz": "~2.1.0",
"request": "^2.81.0",
"request-promise-native": "^1.0.3",
"underscore": ">=1.8.3"
}
}
+27 -11
View File
@@ -75,11 +75,13 @@ app.all('/', function (req, res) {
res.status(500).send("Generic container: no requests supported");
return;
}
const context = {
request: req,
response: res
// TODO: context should also have: URL template params, query string
};
function callback(status, body, headers) {
if (!status)
return;
@@ -90,18 +92,32 @@ app.all('/', function (req, res) {
}
res.status(status).send(body);
}
try {
//
// Customizing the request context
//
// If you want to modify the context to add anything to it,
// you can do that here by adding properties to the context.
//
userFunction(context, callback);
} catch(e) {
console.log(`Function error: ${e}`);
callback(500, "Internal server error")
//
// Customizing the request context
//
// If you want to modify the context to add anything to it,
// you can do that here by adding properties to the context.
//
let functionProm;
if (userFunction.length === 1) { // One argument (context)
// Make sure their function returns a promise
Promise.resolve(userFunction(context)).then(function({ status, body, headers }) {
callback(status, body, headers);
}).catch(function(err) {
console.log(`Function error: ${e}`);
callback(500, "Internal server error");
});
} else { // 2 arguments (context, callback)
try {
userFunction(context, callback);
} catch (err) {
console.log(`Function error: ${e}`);
callback(500, "Internal server error");
}
}
});
app.listen(argv.port);
+5 -2
View File
@@ -1,6 +1,9 @@
module.exports = function (context, callback) {
module.exports = async function (context) {
console.log("headers=", JSON.stringify(context.request.headers));
console.log("body=", JSON.stringify(context.request.body));
callback(200, "Hello, world !\n");
return {
status: 200,
body: "Hello, world !\n"
};
}