Express.js get http method in controller


Question

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() });
};
1
49
6/23/2012 8:47:05 AM

Accepted Answer

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

93
8/2/2017 6:05:02 AM

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


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon