前几天给大家介绍了使用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)将接受数据转为对象,输出数据搞定!
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句