POST vs PUT vs OPTIONS 等:哪种请求方法在语义上适合 MySQL 搜索不更改数据库?

问题描述

POST vs PUT vs OPTIONS 等:哪种请求方法在语义上适合 MySQL 搜索(无需更改数据库) ,只从中获取信息)? 一开始我想使用GET方法,但是这里有一个大问题:GET不接受正文——但我需要将搜索参数传递给服务器! 一旦我为此目的使用了 GET 方法并将请求参数加入到 URL 后 '?'-sign(作为一个字符串,我使用 URLSearchParams 将我的查询对象转换为该字符串),并且它起作用了,但现在我使用内容类型“application/json”,这使得这种方式更加不方便(如果不是不可能的话),所以我需要我的请求有一个正文!

因此,我为此选择了 OPTIONS 方法:一个简单但可能是错误的逻辑——POSTPUTPATCH 从语义的角度来看不应该使用,因为我根本没有在服务器上做任何更改——只是在 mysql 数据库中执行一个无害的搜索(对来自 node js (express) 的 mysql 服务器并使用 mysql2 模块获取搜索结果); GET 不能使用,因为它忽略了请求体并且没有将它传递给服务器; 还剩下什么???

我的代码(我想这无关紧要,因为没有它,情况很清楚,但仍然如此):

  • 前端:

     function ajax(method,url,body,timeout=5000) {
     return new Promise((resolve,reject) => {
         const xhr = new XMLHttpRequest();
         xhr.open(method,true);
         xhr.setRequestHeader('Content-type','application/json;charset=UTF-8');  
         xhr.onloadend = () => {
             if(xhr.status > 399) {
                 reject(`${xhr.status} ${xhr.statusText}`);
                 console.error(xhr); 
             } else {
                 resolve(xhr.response);
             }
         }
         xhr.timeout = timeout;
         xhr.ontimeout = () => {
             console.error(xhr);
             reject(`невдала спроба запиту на сервер (перевищено таймаут).`);
         };
         xhr.onerror = () => {
             console.error(xhr)
             reject('невдала спроба запиту на сервер!')
         }
         xhr.send(JSON.stringify(body));
     });
     }
    
    
     ajax('OPTIONS',searchParamsObj);
    
  • 后端(Node js、express):

     app.options('/employeesPage',function(request,response) {
         // asynchronous request to a mysql DB with
         // *response.status(200).json(objectWithSearchResults);*
         // inside the callback of the last 'then' of the promise chain
     })
    

它工作正常,但是在这里使用 OPTIONS 在语义上合适吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...