使用 post 方法将数据传输到服务器而不更改节点中的 url。 js

Posted

技术标签:

【中文标题】使用 post 方法将数据传输到服务器而不更改节点中的 url。 js【英文标题】:using post method to transfer data to server without changing url in node. js 【发布时间】:2020-10-22 17:54:23 【问题描述】:

我现在正在开发一个实时聊天应用程序。我使用 node.js、ejs 模板和 mysql 数据库。 我想添加“传输文件”功能,这是我的客户端代码。

<form action="/upload" method="POST" enctype="multipart/form-data">
                <input  id = "file" type="file" name="fliename">
                <input  id="upload" type ="submit" value="Upload">
              </form>

这是我的服务器端代码:

.post('/upload',(req,res)=>if(req.files)console.log(req.files);

如果我使用 post 方法从客户端获取文件,那么 URL 将被更改,有什么方法可以避免 URL 更改?我只是想用这个 post 方法将文件保存到数据库中。 或者有一些更好的解决方案可以代替? 提前致谢!

【问题讨论】:

【参考方案1】:

您应该使用 prevent default 来阻止默认表单行为,并使用 js fetch() 在不更改 url 的情况下发送表单数据。

const myForm = document.querySelector("form");
/*BLOCK FORM SUBMIT*/
myForm.addEventListener("submit", e => 
    e.preventDefault();
    return false;
    /*Extract FILE and add it to FormData*/
    const myFormFile = document.querySelector("input#file");
    const file = myFormFile.target.files || myFormFile.dataTransfer.files
    const formData = new FormData();
    if (file.length > 0) 
        formData.append("filename", file[0]);
    
    /*Now once you've got the FormData, you dhould send it with fetch.*/
        fetch('/post', 
        method: "POST",
        body: formData,
    );
);

【讨论】:

以上是关于使用 post 方法将数据传输到服务器而不更改节点中的 url。 js的主要内容,如果未能解决你的问题,请参考以下文章

使用 Http Post 发送图像

Oracle 表单:将项目回滚到数据库值而不更改表单

HTTP面试题

通过 ajax POST 上传图片而不使用 HTML 表单

发送无表单的 POST 数据

确保控制器方法实际上是由 ajax 或 mvc 中的 POST 请求调用的