Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Override method GET to DELETE in nodeJS using anchor tag

So, supposed i have this link in my ejs file :

<a href="/user/12">Delete</a>

And in my route file, i have delete code like following :

router.delete( '/user/:id', function ( req, res ) {
   // delete operation stuff
});

So my question is, how i can override GET request from link into DELETE method to ensure my router.delete route able to handle it. Right now, its only detect the request as a GET. I'm using this Method Override module to handle it, But seems like all of examples were using form element, not the anchor way. Anyone?

like image 576
Norlihazmey Ghazali Avatar asked Jan 21 '16 14:01

Norlihazmey Ghazali


1 Answers

Anyway, right now here is the solutions i used to override GET request by using middleware before application request was made, so far for the link i change the href to look like this :

<a href="/user/12?_method=DELETE" >Delete</a>

And in route :

router.use( function( req, res, next ) {
    // this middleware will call for each requested
    // and we checked for the requested query properties
    // if _method was existed
    // then we know, clients need to call DELETE request instead
    if ( req.query._method == 'DELETE' ) {
        // change the original METHOD
        // into DELETE method
        req.method = 'DELETE';
        // and set requested url to /user/12
        req.url = req.path;
    }       
    next(); 
});

Finally, the requested path will match this route :

router.delete( '/user/:id', function ( req, res ) {
  // delete operation stuff
});

Anyone who encountered this problems may try it out and if anyone who facing this problems and able to solved it with great solutions, please let me know. Happy codding!

like image 107
Norlihazmey Ghazali Avatar answered Sep 22 '22 06:09

Norlihazmey Ghazali