Express.js get http method in controller

Httpnode.jsExpress

Http Problem Overview


I am building a registration form (passport-local as authentication, forms as form helper).

Because the registration only knows GET and POST I would like to do the whole handling in one function.

With other words I am searching after something like:

exports.register = function(req, res){
    if (req.isPost) {
       // do form handling
    }
    res.render('user/registration.html.swig', { form: form.toHTML() });
};

Http Solutions


Solution 1 - Http

The answer was quite easy

exports.register = function(req, res) {
    if (req.method == "POST") {
       // do form handling
    }
    res.render('user/registration.html.swig', { form: form.toHTML() });
};

But I searched a long time for this approach in the express guide.

Finally the node documentation has such detailed information: http://nodejs.org/api/http.html#http_http_request_options_callback

Solution 2 - Http

Now you can use a package in npm => "method-override", which provides a middle-ware layer that overrides the "req.method" property.

Basically your client can send a POST request with a modified "req.method", something like /registration/passportID?_method=PUT.

The

> ?_method=XXXXX

portion is for the middle-ware to identify that this is an undercover PUT request.

The flow is that the client sends a POST req with data to your server side, and the middle-ware translates the req and run the corresponding "app.put..." route.

I think this is a way of compromise. For more info: method-override

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questiondev.pusView Question on Stackoverflow
Solution 1 - Httpdev.pusView Answer on Stackoverflow
Solution 2 - HttpzkmooneaView Answer on Stackoverflow