2016-06-30 40 views
0

我有一個API,如果需要更新對象,我應該發送PATCH請求;問題是,當我發送PATCH請求身體總是未定義。NodeJS:如何使用HTML表單發送PATCH&DELETE請求

這是如何我發送PATCH請求例如。

app.patch('/applications/update/:application_id', function(request, response) { 
      var application_id = request.params.application_id; 
      require('../../models/applications/update_application_by_id').get(request.body, application_id, function(result){ 
       response.render('applications/details', {application_details:result}); 
      }); 
     }); 


<form enctype="application/json" class="form-horizontal" role="form" method="post" action="/applications/update/{{application_details._id}}"> 
<input type="hidden" name="_method" value="PATCH" /> 
<input type="text" name="name" class="form-control"> 
<button type="submit" class="btn btn-yellow pull-right">update</button> 
</form> 

,這我如何處理它

exports.get = function(request_body, application_id, call_back){ 
var http_request = unirest("patch", "https://xx/api/applications/"+application_id); 

http_request.headers({ 
    "cache-control": "no-cache", 
    "content-type": "application/json", 
    "x-application-key": "xxxxxxxxxxxxxxxxxx" 
}); 

http_request.type("json"); 
http_request.send(request_body); 

http_request.end(function (http_response) { 
    console.log(http_request.body); 
    if (http_response.error) throw new Error(http_response.error); 

    return call_back(http_response.body); 
}); 
} 

回答

0

所以在這裏我們去,

我用很簡單的方法解決這個問題,因爲我用API說話,所以我有一個用API交談模型的文件,所以我定義這些文件我的方法,使所有的形成崗位並將崗位主體作爲參數傳遞給模型。

這個例子會解釋更多。

模型文件:

var request = require("request"); 

exports.get = function(request_body, application_id, call_back){ 

    var options = { 
     method: 'PATCH', 
     url: 'http://XXXXXXXXXXXXXXXX'+ application_id, 
     headers: 
     { 
      'content-type': 'application/json', 
      'x-application-key': 'XXXXXXXXXXXXXXXXXXX' 
     }, 
     body: request_body, 
     json: true 
     }; 

    request(options, function (error, response, body) { 
     if (error) throw new Error(error); 
     return call_back(body); 
    }); 


}; 

控制器的文件:

app.post('/applications/update/:application_id', function(request, response) { 
    require('../../models/XXX/XXXX').get(request.body, request.params.application_id, function(result){ 
     response.render('XXXXX/details', {response_update:result}); 
    }); 
}); 

表單模板:

<form class="form-horizontal" role="form" method="post" action="/applications/update/{{application.[0]._id}}"> 
    <div class="form-group"> 
     <div class="col-sm-4"> 
      <input type="text" name="name" class="form-control" value="{{application.[0].name}}" required> 
     </div> 
    </div> 

<div class="form-group"> 
<div class="col-sm-offset-4 col-sm-4"> 
    <button type="submit" class="btn btn-yellow pull-right">update</button> 
</div> 
</div> 
</form> 
0

你要自己解開請求。

您的形式實際上是發送一個正常的POST請求:

<form enctype="application/json" class="form-horizontal" role="form" method="post" action="/applications/update/{{application_details._id}}"> 

所以你需要一個轉換是POST成PATCH/DELETE,_method是一個路由或中間件。

+0

我已經添加 裏面的表格,仍然不能工作 –

+0

如果你沒有明確處理y ou on。 ExpressJS **不會爲你做這件事。 – kazenorin

相關問題