node表单提交POST提交

前几天给大家介绍了使用node的提交(get)获取到表单提交的内容,get提交的参数查询部分(query)可以获得到,由于get提交的内容在url显示,而post提交处理机制,为了保障安全性不显示在url中,下面案例介绍下post提交案例!

首先看一下静态页面文件(info.html)

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Document</title>
</head>
<body>
   <form action="dopost" method="post" enctype="multipart/form-data">
      <p>
 姓名 : <input type="text" name="name">
      </p>
      <p>
 性别 : 
          <input type="radio" name="sex" value="男">男
          <input type="radio" name="sex" value="女">女
      </p>
      <p>
 爱好:
         <input type="checkbox" name="hobby" value="睡觉" />睡觉
         <input type="checkbox" name="hobby" value="吃饭" />吃饭
         <input type="checkbox" name="hobby" value="足球" />足球
      </p>
      <p>
 图片:
         <input type="file" name="tupian" />
      </p>
      <p>
         <input type="submit" />
      </p>
   </form>
</body>
</html>

看一下控制提交的node代码(app.js)

const http=require('http');
//查询模块
const querystring=require("querystring");
const server=http.createServer(function(req,res){
    //访问的url且类型是post请求   toLowerCase转小写(保持一致)
    if(req.url=="/info" && req.method.toLowerCase()=="post"){
        //alldata传输的整个完整数据
        var alldata="";
        //下面是post请求接收的一个公式
        // node为了追求极致,它是一个小段一个小段接收的。
        //接受了一小段,可能就给别人去服务了。防止一个过大的表单阻塞了整个进程
        req.addListener("data",function(chunk){
           //每次传入一段chunk(数据,一次无法传输完毕,就服务另外的请求进行调度)
            alldata+=chunk;
        })
        req.addListener("end",function(){
            //全服接收完毕,输出完整的数据
          var alldatas=  querystring.parse(alldata);
            console.log(alldatas);
            //请求对象中当数据
            console.log(alldatas.name+"\n"+alldatas.sex)
            res.end("200,  success!");
        })

    }
    res.end('success')
})
server.listen(80,"127.0.0.1")

上述代码有点乱?不要着急,一点点解析出来就简单明了!

判断用户的url,并且提交方式是get

if(req.url=="/info" && req.method.toLowerCase()=="post")

下面是post提交的小公式

 req.addListener("data",function(chunk){
           //每次传入一段chunk(数据,一次无法传输完毕,就服务另外的请求进行调度)
            alldata+=chunk;
        })
        req.addListener("end",function(){
            //全服接收完毕,输出完整的数据
          var alldatas=  querystring.parse(alldata);
            console.log(alldatas);
            //请求对象中当数据
            console.log(alldatas.name+"\n"+alldatas.sex)
            res.end("200,  success!");
        })

首先,要监听addListener(nodejs独特方法,非js的),data参数固定,一个回调函数参数传入chunk,每次post请求数据就是chunk一次,然后将新的chunk进行重新自增到原来的alldata(用来保存post的数据);

请求完毕进行监听一次,data参数改为end,回调函数无需传入参数.输出完整的alldata就是请求完整的数据,这个数据我们还需要一个模块(querystring)进行转换,使用querystring.parse(alldata)将接受数据转为对象,输出数据搞定!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏红色石头的机器学习之路

如何将ipynb转换为html,md,pdf等格式

jupyter notebook是一个非常棒的工具,关于jupyter的入门教程请参考我之前写的两篇博客: Jupyter notebook入门教程(上) Ju...

95600
来自专栏开源优测

工具篇 - JMeter组件手册04

前言 在jmeter中提供了一系列的不同的组件,每一种组件都提供了某类功能的实现,用于支持性能测试的实施。 请看下图,jmeter的核心组件构成。 ? 学习、研...

40180
来自专栏北京马哥教育

不服来战!这20类500个常用命令参数你一定记不到50%

公告:今天加班的都是好人!好人!好人! 本文由马哥教育面授班24期学员推荐,转载自互联网,作者为LVS,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛...

32280
来自专栏自动化测试实战

Flask第六篇——项目配置文件

39970
来自专栏happyJared

Linux私房菜:文件目录管理及常见命令

10910
来自专栏linux驱动个人学习

解析Linux中的VFS文件系统之文件系统的注册(二)

继上一篇文章:https://cloud.tencent.com/developer/article/1053882 3. 文件系统的注册 这里的文件系统是指可...

36960
来自专栏信安之路

PHP 文件包含漏洞姿势总结

文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注...

70200
来自专栏difcareer的技术笔记

如何压缩ndk的so库

15370
来自专栏运维小白

4.3/4.4 磁盘分区

添加虚拟磁盘 第一步,选择虚拟机中的“设置” ? 第二步,选择“添加硬盘” ? 第三步,选择_SCSI (推荐) # 保持默认 ? 第四...

27050
来自专栏ytkah

laravel项目thinksns-plus安装出现RuntimeException Symlink from * to * failed错误

  今天ytkah安装thinksns-plus的laravel项目时出现了一个错误,提示如下,这个可能跟php函数被禁用有关,查看了一下安装文档,有一项php...

7210

扫码关注云+社区

领取腾讯云代金券