node.js表单处理和文件上传

Ajax 提交表单与文件上传 通过使用 Ajax 技术,我们可以轻松实现表单提交和文件上传功能,并且在不刷新页面的情况下与用户进行交互,极大地提升了用户体验。本文介绍的代码示例涵盖了从前端到后端的实现过程,你可以根据实际项目需求进行调整和扩展。在实际开发中,注意优化代码和处理各种边界情况,以确保应用的稳定性和安全性。 阅读详情

一、get请求

表单提交HTML

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>表单提交</title>
</head>
<body>
  <form action="http://127.0.0.1:2080/" method="GET">
     <input type="text" name="name"><br>
     <input type="text" name="age">
     <input type="radio" name="sex" value="男">男
     <input type="radio" name="sex" value="女">女
     <br>
     <input type="submit">
  </form>
</body>
</html>



node.js服务器搭建

这里重要利用了url模块,其中url.parse(req.url, true).query,
url.parse()第二个参数设置为true,则 query 属性总会通过 querystring 模块的 parse() 方法生成一个对象。 如果为 false,则返回的 URL 对象上的 query 属性会是一个未解析、未解码的字符串。 默认为 false。

const http = require('http');
const url = require('url');

const server = http.createServer((req, res) => {
   const queryObj = url.parse(req.url, true).query;
   res.writeHead(200, {
       'Content-Type': 'text/html; charset=UTF8'
   })
   const name = queryObj.name;
   const age = queryObj.age;
   const sex = queryObj.sex;
   res.write(`服务器接受到提交: name:${name}, age: ${age}, sex: ${sex}`);
   res.end();
})
server.listen(2080, '127.0.0.1');


运行

命令行启动服务器 ,打开html文件,注意不需要写服务器域名

这里写图片描述

填写表单,提交数据,当点击提交后,请求的的url直接从file:///Users/shaojinghong/Desktop/form.html
变成http://127.0.0.1:2080/?name=jinghong&age=22&sex=%E7%94%B7

这里写图片描述


二、POST请求

搭建服务端

post请求服务端固定写法: req.addListener(‘data’, (chunk) => { })和req.addListener(‘end’, () => {});用来一段一段接受buffer格式的表单数据,然后调用toString()得到字段name=%E6%99%AF%E6%B4%AA&%E7%94%B7=on,然后调用 querystring模块的parse(dataString)将这种字符串转换成对象

const http = require('http');
const querystring = require('querystring');
const server = http.createServer((req, res) => {
    if (req.url == '/dopost' && req.method.toLowerCase() == 'post'){
      // 如果访问的地址是这个,并且请求方法是post
      let allData = '';
      // 下面是为了追求极致,是一小段一小段chunk接收的
      req.addListener('data', (chunk) => {
          // chunk为buffer类型
          allData += chunk;
          console.log(chunk); // <Buffer 6e 61 6d 65 3d 25 45 36 25 39 39 25 41 46 25 45 36 25 42 34 25 41 41 26 25 45 37 25 39 34 25 42 37 3d 6f 6e>
      });
      // 表单chunk全部接收完毕
      req.addListener('end', () => {
          let dataString = allData.toString();
          console.log(dataString);// name=%E6%99%AF%E6%B4%AA&%E7%94%B7=on
          let dataobj = querystring.parse(dataString);
          console.log(dataobj); // { name: '景洪', '男': 'on' }
          res.end('success');
      })

    }
});
server.listen(8080, '127.0.0.1'); 



编写表单HTML

<!DOCTYPE html>
<html>
<head>
    <title>post实验</title>
    <meta charset="utf-8">
</head>
<body>
  <form action="http://127.0.0.1:8080/dopost" method="post">
   <p>
      姓名:<input type="text" name="name">
   </p>
   <p>
      性别:
      <input type="radio" name="男">男
      <input type="radio" name="女">女

   </p>
   <p>
      <input type="submit">
   </p>
   </form>
</body>
</html>



运行server,提交表单


这里写图片描述

这里写图片描述



三、post上传文件

编写HTML表单文件

注意使用 < form action=”http://127.0.0.1:8080/dopost” method=”post” enctype=”multipart/form-data” >和< input type=”file” name=”picture” >标签
关于file上传标签说明:http://www.w3school.com.cn/jsref/dom_obj_fileupload.asp

具体代码:

<!DOCTYPE html>
<html>
<head>
    <title>post实验</title>
    <meta charset="utf-8">
</head>
<body>
  <form action="http://127.0.0.1:8080/dopost" method="post" enctype="multipart/form-data">
   <p>
      姓名:<input type="text" name="name">
   </p>
   <p>
      性别:
      <input type="radio" name="男">男
      <input type="radio" name="女">女
   </p>
   <p>
      图片上传
      <input type="file" name="picture">
   </p>
   <p>
      <input type="submit">
   </p>
   </form>
</body>
</html>



编写node服务器端代码,使用formidable包,进行post数据的接收、解析

formidable: https://www.npmjs.com/package/formidable

const http = require('http');
const querystring = require('querystring');
const formidable = require('formidable');
const server = http.createServer((req, res) => {
    if (req.url == '/dopost' && req.method.toLowerCase() == 'post'){
        var form = new formidable.IncomingForm();
        // 设置文件保存路径,相对路径
        form.uploadDir = "./uploads";
        // 解析表单, fields表示文本域,files表示文件域
        form.parse(req, function(err, fields, files) {
          console.log(fields, files);
          res.writeHead(200, {'content-type': 'text/plain'});
          res.write('received upload:\n\n');
          res.end();
        });

    }
});
server.listen(8080, '127.0.0.1'); 

这里写图片描述



使用express解析post提交的数据为json格式

这里需要使用body-parser这个中间件

const express = require('express');
// 使用中间件之前先npm install body-parser
const bodyParser = require('body-parser');

const app = new express();

//使用中间件
app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.json());

app.post('/', (req, res) => {
    console.log(req.body);
    res.send();
});

app.listen(3000);
node 文件上传操作(前端 form表单上传 formData上传 后端 node 使用express+multer) 前端 form表单上传 formData上传 后端 node 使用express+multer 阅读详情

相关推荐

轻松实现表单文件上传与邮件发送

本文介绍了Web开发中实现文件上传及邮件发送的完整流程。前端通过HTML表单和JavaScript的FileReader API读取文件并转换为Base64格式,使用fetch API将数据发送至后端。后端采用Node.js和Express框架处理请求,利用Resend服务发送带附件的邮件。文章详细展示了从文件选择、前端处理到后端API实现的每一步代码,为开发者提供了处理文件上传与邮件发送功能的完整解决方案。该方案适用于需要发送带附件邮件的各种Web应用场景。

m0_62153576的博客 79

node实现表单图片、数据上传

在搭建博客时,想要在文章中添加图片作为文章封面,这时候要对前台表单中上传的文件进行上传等操作 前台index.ejs页面的表单 &amp;lt;form class=&quot;form-signin&quot; role=&quot;form&quot; method=&quot;post&quot; enctype='multipart/form-data'&amp;gt; &amp;lt;div class=&am

大桶爆米花eee 847

如何在Node.js中处理文件上传?

在Node.js中处理文件上传是一个常见的需求,尤其是在构建Web应用程序时。通过使用合适的中间件,你可以轻松地实现文件上传功能。以下是一个详细的指南,介绍如何在Node.js中处理文件上传。

祈澈菇凉 1442

node接收文件

安装:npm i formidable@2.1.1。安装:npm i formidable@2.1.1。

IT菜鸟 1430

AJAX文件异步上传实战指南

AJAX(Asynchronous JavaScript and XML)是一种无需重新加载整个页面即可更新部分网页的技术,于2005年由 Jesse James Garrett 提出。其核心是利用了JavaScript与Web服务器进行异步通信的能力。它允许用户在不刷新页面的情况下与服务器交换数据,并将结果更新到网页中,这种特性大大提升了Web应用的响应速度和用户体验。

weixin_42575505的博客 788

Windows环境下Node.js文件上传DEMO案例解析

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,它使得JavaScript能够脱离浏览器执行服务器端的代码。Node.js采用了事件驱动、非阻塞I/O模型,使其轻量又高效,非常适合处理大量并发的I/O操作。Express是一个灵活的Node.js Web应用框架,它提供了一系列强大特性来帮助开发者创建各种Web和移动应用。它有几个显著特点:轻量级且高效:Express不会对应用程序添加额外的限制,它可以作为一个中间件运行在其他的Node.js框架之上。

weixin_35751412的博客 994

nodeJs-文件上传

文件上传

软工二班秦同学的博客 1569

NodeJS本地上传文件至服务器

NodeJS本地上传文件至服务器

node的express框架中使用Multer实现文件上传功能

/ req.file 是 'myfile' 文件 的信息 // req.body 将具有文本域数据,如果存在的话 res . send('文件上传成功!');})这个路由中的upload.single(‘myfile’), 'myfile’是我们在前端form表单中定义的name值,对应的文件的file对象添加到了req。file属性中。upload.single的作用是处理前端传过来的name为’myfile’的单个文件。而req.body属性则包含了非文件的表单数据。req.file对象。

jieyucx的博客 2040

node.js实现的文件传输功能

用node.js实现的文件传输程序,支持多个客户端。

告别复杂模型:用UFLD算法5分钟搞定车道线检测(附Python代码)

本文介绍了UFLD(Ultra Fast Lane Detection)算法在车道线检测中的高效应用,仅需5行核心代码即可实现实时检测,特别适合边缘计算设备。通过对比传统方法,UFLD在推理速度、模型大小和硬件需求上具有显著优势,是深度学习领域轻量级解决方案的典范。

weixin_27872611的博客 288

nodejs实现文件上传保存在本地

2、接下来我们就要写一个上传文件的表单了,在根目录新建一个html文件夹,里面建一个mypage.html文件,写入以下代码。1、首先新建一个文件夹 fileUpload ,在vscode打开,根目录新建一个index.js文件,写入以下代码,启动。在项目终端运行nom install multer安装multer模块,然后运行node ./index.js。就一个index.js和一个mypage.html。接下来运行项目,在浏览器上传文件后,相应的uploads文件夹就会保存对应的文件了。

m0_52320512的博客 2625

STM32中RS485方向控制引脚应用详解

深入解析STM32如何通过GPIO控制RS485通讯的方向引脚,实现半双工通信的精准切换。重点讲解硬件连接与软件时序配合,确保rs485通讯稳定可靠,适用于工业控制等实际场景。

weixin_42451850的博客 400

前端Node实现简易的文件上传下载

前端代码 文件名:register.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=ed...

qq_35382207的博客 520

数字IC设计——功耗分析

功耗是数字IC芯片的一个重要指标

知识,既贵,又便宜。 9362

在 dell precision 7920 tower CentOS 8 Stream 上安裝nvidia驱动程序、Anaconda

简单记录一下如何在实验室dell precision 7920 tower CentOS 8 Stream上安装nvidia显卡驱动。

chen9046的博客 995

实现文件的上传功能以及文件上传到服务器

实现文件的上传功能以及文件上传到服务器

m0_70707972的博客 735

Arxml文件可视化:当汽车软件架构遇见交互式设计工具

本文探讨了Arxml文件在汽车电子系统开发中的可视化技术,结合AUTOSAR架构标准,介绍了如何利用现代Web技术构建交互式设计工具。通过三维组件关系图、动态数据流展示和版本对比等功能,显著提升开发效率和架构评审质量,适用于MBD和ASPICE开发流程。

weixin_29050271的博客 427

vue+axios(前端)node+express(后台)使用formdata上传图片

需求前因:平常普通的HTML中我们上传文件大多在标签内使用直接submit整个表单,现如今我们不能使用标签,如何只是用实现上传文件呢? 实现需求需要解决的问题: 1.如何在js逻辑中取得文件? 2.以什么形式上传? 3.后台如何接收? 前台代码:(如何取得文件实体,以FormData形式用axios上传) &amp;lt;template&amp;gt; &amp;lt;div&amp;gt; ...

hardly555的博客 4669

【35】软考软件设计师——设计模式代码填空(C++版)满分精讲|第5/6题二选一必考

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第35篇,聚焦下午选做题**第5/6题C++版设计模式代码填空**,与上一篇Java版形成双子配套,单题分值稳定12~15分。全文超4000字深度拆解C++独有核心考点:虚函数/纯虚函数、构造与析构函数规范、继承权限、模板类编程在设计模式中的应用;精讲单例、工厂、策略、观察者、适配器五大高频模式的C++专属代码写法,标注所有填空核心点位、语法陷阱、内存安全规范

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 543

【INMP441】 MEMS麦克风,让硬件“听得见”,更要“听得清”

INMP441是一款数字MEMS麦克风,采用PDM接口输出高质量数字音频信号。相比传统模拟麦克风,它具有高度集成、抗干扰强、功耗低等优势,支持通过时钟启停实现软件控制开关。该麦克风体积小巧但功能强大,内置MEMS传感器、ADC转换器等模块,适合智能音箱、语音遥控等应用。工程师可通过ESP32等主控芯片轻松连接INMP441,利用多麦克风阵列实现波束成形等高级功能。INMP441展现了数字音频采集的先进技术,为创客和智能硬件开发者提供了优秀的音频解决方案。

深耕CV 1536

express框架中常用的第三方模块joi、formidable、mongoose-sex-page

Joi joi可以用于js对象的规则描述语言和验证器 使用的方法: 引入joi模块 定义对象的验证规则 使用joi.validate(par1,par2)方法进行验证。其中第一个参数是要进行验证的对象,第二个参数是对象的验证规则 /***********示例代码************/ const Joi = require('joi'); const schema = { user...

就是有点怕怕的博客 2271

从养殖场到科技前沿:YOLOv11+OpenCV精准计数鸡蛋与鸡

YOLOv11结合OpenCV技术,精准识别和计数鸡蛋与鸡,广泛应用于养殖场、市场监控和自动化包装。通过深度学习与计算机视觉,提升农业生产效率,让智能化管理更简单高效。

专注于深入研究多种编程语言,以实战为导向,逐步拓展开发技能,提升工程化编码和思维能力,展现无敌技术实力。 1206

原生js请求node.js上传图片接口,写前后端代码

1.先创建一个html文件,用来发起请求 ```javascript <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initia

qq_45668489的博客 1571

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

npm系列:formidable ---- formidable使用方法及使用Express框架和formidable模块处理文件上传的简单示例

formidable是一个开源的Node.js模块,由@felixge为Transloadit开发。它支持快速且流式的multipart解析,自动将文件上传写入磁盘,并提供丰富的插件API,允许自定义解析器和插件。formidable经过大量实际应用的考验,被认为是生产就绪的,并在多个生产环境中稳定运行多年。

wsad0532的专栏 2266

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

其他内容:Node js 中的 Multer

文件上传和下载已成为我们经常执行的非常常用的操作。以任何社交媒体应用程序为例;用户可以上传图像,也可以下载网站上显示的图像。因此,对于开发人员来说,了解文件处理是如何完成的和客户端以及这些文件如何存储在服务器端变得很重要。Node.js中的 Multer 是一个中间件,用于轻松处理文件上传完成后使用的多部分/表单数据。为了获得最大的效率,Multer 构建在 busboy 之上,busboy 是一个node.js模块,用于处理请求中传入的 HTML 表单数据。

新华编程特战队 1821

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: node.js实现markdowm转换成HTML
下一篇: 记录常用Node工具包
景洪在编程
博客等级 码龄9年 13粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值