Nodejs之http的表单提交


Posted in NodeJs onJuly 07, 2017

之前介绍了http模块的请求与响应的过程,也介绍了TCP协议的客户端与服务端的数据传输,http协议是TCP上层协议。这里创建了一个简单的web服务器,并对提交表单数据进行处理,根据了不起的Node.js一书总结。

POST方法提交表单数据

之前也总结过,向服务器提交数据需要使用POST方法,GET方法的请求信息都在查询字符串中,没有请求体,而POST方法的传输的数据都在请求体中,故提交表单数据时需要使用POST方法。

req是请求信息,req.url表示请求的地址,当服务器运行之后,req请求的网址为127.0.0.1:3000,此时req.url为‘/',则返回的是一串表单数据,在表单数据中设置了method是post,action是‘/url',表面提交数据的方式是POST,将数据提交的地址为127.0.0.1:3000/url,而提交之后要获取新的页面即127.0.0.1:3000/url,此时req.url为‘/url',故显示的另一个页面。

//提交表单数据
 var http=require('http');
 var querystring=require('querystring');
 
 var server=http.createServer(function (req,res) {
 //req.url不同则返回的页面不同
 if('/'==req.url){
  res.writeHead(200,{'Content-Type':'text/html'});
  res.write([
  '<form method="post" action="/url">',
  '<h1>My Form</h1>',
  '<fieldset>',
  '<label>Personal Information</label>',
  '<p>What is your name?</p>',
  '<input type="text" name="name">',
  '<button>submit</button>',
  '</form>'
  ].join(''));
  res.end();
 }else if('/url'==req.url&&req.method=='POST'){
  var reqBody='';
  req.on('data',function (data) {
  reqBody += data;
  });
  req.on('end',function () {//用于数据接收完成后再获取
  res.writeHead(200,{'Content-Type':'text/html'});
  res.write('you have sent a '+req.method+' request\n');
  res.write('<p>Content-Type:'+req.headers['content-type']+'</p>'
   +'<p>Data:your name is '+querystring.parse(reqBody).name+'</p>');
  res.end();
  })
 }else{
  res.writeHead(404);
  res.write('Not Found');
  res.end();
 }
 }).listen(3000,function () {
 console.log('server is listening 3000');
 });

提交之后,需要获取请求信息的请求体,因为POST方法中信息都在请求体中,用req绑定data事件获取数据,这里需要注意的是必须得在数据接收完成后再对数据进行操作,即必须绑定end事件监听请求信息是否传输完成。

querystring是查询字符串模块,用于对查询字符串的解析,parse方法将查询字符串解析成一个对象。在git中运行服务器,得到页面是这样的:

Nodejs之http的表单提交

提交数据后:

Nodejs之http的表单提交

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs npm包管理的配置方法及常用命令介绍
Jun 05 NodeJs
nodejs中转换URL字符串与查询字符串详解
Nov 26 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
NodeJS使用formidable实现文件上传
Oct 27 NodeJs
详解nodejs 文本操作模块-fs模块(五)
Dec 23 NodeJs
nodejs中全局变量的实例解析
Mar 07 NodeJs
nodejs个人博客开发第七步 后台登陆
Apr 12 NodeJs
Nodejs之TCP服务端与客户端聊天程序详解
Jul 07 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
nodeJS微信分享
Dec 20 NodeJs
nodejs实现获取本地文件夹下图片信息功能示例
Jun 22 NodeJs
nodejs简单抓包工具使用详解
Aug 23 NodeJs
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
Jul 05 #NodeJs
nodejs模块学习之connect解析
Jul 05 #NodeJs
详解HTTPS 的原理和 NodeJS 的实现
Jul 04 #NodeJs
nodejs 子进程正确的打开方式
Jul 03 #NodeJs
Express+Nodejs 下的登录拦截实现代码
Jul 01 #NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 #NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 #NodeJs
You might like
日本因肺炎疫情影响,这几部动漫推延播放!
2020/03/03 日漫
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
那些年一起学习的PHP(二)
2012/03/21 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
javascript入门之window对象【新手必看】
2016/11/22 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
微信小程序 获取javascript 里的数据
2017/08/17 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
VUE安装使用教程详解
2019/06/03 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
Python使用matplotlib绘制三维参数曲线操作示例
2019/09/10 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
html5清空画布方法(三种)
2017/10/16 HTML / CSS
我的大学生活演讲稿
2014/04/25 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
Hive导入csv文件示例
2022/06/25 数据库