Reputation:
In express, I have defined some routes
app.post("/api/v1/client", Client.create);
app.get("/api/v1/client", Client.get);
...
I have defined how to handle requests inside a Client controller. Is there a way that I can do some pre-processing to the requests, before handling them in my controller? I specifically want to check if the API caller is authorized to access the route, using the notion of access levels. Any advice would be appreciated.
Upvotes: 31
Views: 40788
Reputation: 4847
You can do what you need in a couple of ways.
This will place a middleware that will be used before hitting the router. Make sure the router is added with app.use()
after. Middleware order is important.
app.use(function(req, res, next) {
// Put some preprocessing here.
next();
});
app.use(app.router);
You can also use a route middleware.
var someFunction = function(req, res, next) {
// Put the preprocessing here.
next();
};
app.post("/api/v1/client", someFunction, Client.create);
This will do a preprocessing step for that route.
Note: Make sure your app.use()
invokes are before your route definitions. Defining a route automatically adds app.router to the middleware chain, which may put it ahead of the user defined middleware.
Upvotes: 69