如何使用 NodeJS 从 html 表单执行 PATCH 请求?

Posted

技术标签:

【中文标题】如何使用 NodeJS 从 html 表单执行 PATCH 请求?【英文标题】:How perform PATCH request from html form using NodeJS? 【发布时间】:2020-04-20 14:12:35 【问题描述】:

这是我尝试通过 NodeJS API 对从前端到 MongoDB 数据库的 html 表单执行补丁请求。

这是一个 Nodejs API 结构

app.route("/requests/:rollno")
  .get(function(req, res) 
// get method to find a query
  )
  .patch(function(req, res) 
    Request.update(
        rollno: req.params.rollno
      , 
        $set:req.body
      ,
      function(err) 
        if (!err) 
          res.send("Successfully updated requests");
        else
          res.send(err);
        
      
    );
  );
  

在表单的前端

<%- include('partials/header') %>
<h1>Recent requests</h1>
<% for(let i = 0; i < posts.length; i++)  %>
<article>
    <form action="/requests/21" method="PATCH">
      <input type="text" name="status[0]">
      <div id="participant"></div>
      <br>
      <button type="button" onclick="addParticipant()">Add</button>
      <button type="button" onclick="delParticipant()">Remove</button>
      <div class="btn-block">
        <button type="submit" href="/success">Submit Request</button>
      </div>
    </form>
</article>
<%  %>

表单实际上并未更新实际服务器上的信息。但是对于邮递员,数据正在更新。相同的最佳分辨率是什么,或者是否有任何替代方法?

【问题讨论】:

【参考方案1】:
<form action="/requests/B194057EP" method="PATCH">

这是无效的,HTML 表单方法属性只支持 GET 和 POST 方法。 &lt;form method="put"&gt; 是无效的 HTML,将被视为 GET 请求。

现在要解决这个问题,您可以利用 Jquery AJAX 将数据从客户端发送到您的后端。

$.ajax(
    url: '<api url>',
    type: 'PATCH',
    data: 
        data: sendData
    ,
    success: function () 
    
)
;

【讨论】:

【参考方案2】:

在 vanilla JS 中,您可以使用 Promise 以及 async/await 来做到这一点,这是它的一个基本示例。

async patching() 
  const responseFlow = await fetch(URL, 
   method: "PATCH",
   headers:   
    'Content-Type': 'application/json'
   ,
   // The content to update
   body: JSON.stringify(
     name: "New name"
   )
 )

【讨论】:

以上是关于如何使用 NodeJS 从 html 表单执行 PATCH 请求?的主要内容,如果未能解决你的问题,请参考以下文章

从 html 页面执行 Nodejs 脚本?

如何从 nodejs 中的多步表单发布数据并表达到 MongoDB?

提交html表单到nodejs

如何从表单创建 json?

使用 NodeJS Express 时将表单数据插入 MySQL 数据库

nodejs / express:如何使用数据发布到外部表单?