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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
nodejs中操作mysql数据库示例
Dec 20 NodeJs
Nodejs学习笔记之Global Objects全局对象
Jan 13 NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
NodeJS学习笔记之MongoDB模块
Jan 13 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
Nodejs监听日志文件的变化的过程解析
Aug 04 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
Nodejs 数组的队列以及forEach的应用详解
Feb 25 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 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
PHP中将字符串转化为整数(int) intval() printf() 性能测试
2020/03/20 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
客户端js判断文件类型和文件大小即限制上传大小
2013/11/20 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
原生js编写焦点图效果
2016/12/08 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
python使用scrapy解析js示例
2014/01/23 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
美国高端医师级美容产品电商:BeautifiedYou.com
2017/04/17 全球购物
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
2015年重阳节主持词
2015/07/04 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
PHP策略模式写法
2021/04/01 PHP
Python如何把不同类型数据的json序列化
2021/04/30 Python
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技