Converts restify routes to support async/await and returned promises. Works with Restify 4.x through 6.x. May work with Restify 7+.
#Supported Restify Versions
- Fully Supported
- 4.x to 5.x
- Probably Works
- 6.x
- Partially Compatible
- 7.x+
- 7.x+
const restify = require('restify');
const restifyPromise = require('restify-await-promise');
const server = restify.createServer({
name: 'myapp',
version: '1.0.0'
});
//Allows you to manipulate the errors before restify does its work
const alwaysBlameTheUserErrorTransformer = {
transform: function( exceptionThrownByRoute ){
//Always blame the user
exceptionThrownByRoute.statusCode = 400;
return exceptionThrownByRoute;
}
}
const options = {
logger: yourLogger, //Optional: Will automatically log exceptions
errorTransformer: alwaysBlameTheUserErrorTransformer //Optional: Lets you add status codes
};
restifyPromise.install( server, options ); // Options is not required
// Async function, automatically calls send with the returned object and next
server.get('/lookup/:name', async function (req) {
return await SomePromise.work( req.parms.name );
});
// Promise function
server.get('/echo/:name', function (req) {
const params = req.params;
return Promise.resolve( { params } );
});
// Existing restify method
server.get('/echo2/:name', function (req, res, next) {
res.send(req.params);
next();
});
// Versioned Route with Restify 7+
server.get('/seek/:enlightenment', restifyPromise.asyncConditionalHandler([
{
version: "1.0.0",
handler: async function (req) {
const result = await searchFor( req.parms.enlightenment );
return result;
}
}
]));
server.listen(8080, function () {
console.log('%s listening at %s', server.name, server.url);
});
$ npm install --save restify-await-promise