2016-06-30 5 views
0

У меня есть API, и я должен отправить запрос PATCH, если мне нужно обновить объект; проблема в том, что когда я отправляю запрос PATCH, тело всегда не определено.NodeJS: Как использовать форму html для отправки запроса PATCH & DELETE

это как я посылаю запрос PATCH Ex.

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

я уже добавить <тип = "скрытый" имя входного = "_ метод" значение = «PATCH» /> внутри формы и все еще не работает –

+0

Это не сработает, если вы не будете явно обращаться с y ou on. ExpressJS ** не делает это для вас. – kazenorin

Смежные вопросы