Autumn is a wrapper for Express that eliminates some boilerplate code. By using decorators on class methods, you are able to define the route and have passport JWT wrap the endpoint.
First create a launcher class that extends AutumnApp and then use the @appConfig decorator to pass the settings.
import bodyParser from "body-parser";
import cors from "cors";
import autumn from 'express-autumn';
@autumn.appConfig({
port: 8000,
searchPaths: ['./src/users'],
jwtSecret: process.env.secret || 'JWT_SECRET'
})
class Main extends autumn.AutumnApp {
preRoute = (app) => {
var corsOptions = {
methods: ['GET','PUT','POST','DELETE','PATCH','OPTIONS'],
allowedHeaders: ['Content-Type', 'Authorization']
};
app.use(cors(corsOptions));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
}
postRoute = (app) => {
app.get('/', (req, res) => {
res.send('Invalid endpoint!');
});
app.use(function(error,req,res,next){
console.log("ERROR: "+error,error.stack);
res.status(500).end();
});
}
}
const main = new Main();
main.start();
The settings passed to @appConfig are:
- port : The port number express will be launched on
- searchPaths : This is an array of paths that Autumn will search through for endpoints
- jwtSecret : The secret string that passport uses for JWT.
To define endpoints, create a class and then decorate the methods you want exposed.
import autumn from 'express-autumn';
class UserEndpoint {
@autumn.endpoint('/login','get',true)
logMeIn(req,res,next) {
console.log('logMeIn');
res.status(200).end();
}
}
export default UserEndpoint;
The method will be passed the standard request, response, next parameters from express. The parameters for the endpoint decorator are:
- The URI path for the endpoint
- The supported request method. Valid values are : 'get', 'post', 'delete', or 'put'
- Authentication flag. If true, Autumn will wrap the endpoint with passport jwt