详解Node.Js如何处理post数据


Posted in Javascript onSeptember 19, 2016

实现思路

将data和end事件的回调函数直接放在服务器中,在data事件回调中收集所有的POST数据,当接收到所有数据,触发end事件后,其回调函数调用请求路由,并将数据传递给它,然后,请求路由再将该数据传递给请求处理程序。

实现步骤

第一步我们设置了接收数据的编码格式为UTF-8,第二步注册了“data”事件的监听器,用于收集每次接收到的新数据块,并将其赋值给postData 变量,最后第三步我们将请求路由的调用移到end事件处理程序中,以确保它只会当所有数据接收完毕后才触发,并且只触发一次。我们同时还把POST数据传递给请求路由

示例代码

index.js

var server = require("./server"); 
var router=require("./router"); 
var requestHandlers=require("./requestHandlers"); 
 
var handle = {} 
handle["/"] = requestHandlers.start; 
handle["/start"] = requestHandlers.start; 
handle["/upload"] = requestHandlers.upload; 
 
server.start(router.route,handle);

server.js

var http = require("http"); 
var url=require("url"); 
 
function start(route,handle) { 
 function onRequest(request, response) { 
  var postData=""; 
    var pathname=url.parse(request.url).pathname; 
  console.log("Request for"+pathname+"received."); 
    
   request.setEncoding("utf8"); 
    
   request.addListener("data", function(postDataChunk) { 
     postData += postDataChunk; 
     console.log("Received POST data chunk '"+ 
     postDataChunk + "'."); 
  }); 
 
  request.addListener("end", function() { 
   route(handle, pathname, response, postData); 
  }); 
    //route(handle,pathname,response); 
   
  //response.writeHead(200, {"Content-Type": "text/plain"}); 
  //response.write("this is a demo"); 
  //response.end(); 
 } 
 
 http.createServer(onRequest).listen(5656,'127.0.0.1'); 
 console.log("Server has started. localhost:5656"); 
} 
 
exports.start = start;

router.js

function route(handle,pathname,response,postData){ 
  console.log("About to route a request for"+pathname); 
  if(typeof handle[pathname]=='function'){ 
    handle[pathname](response,postData); 
  } 
  else{ 
    console.log("no request handler found for"+pathname); 
    response.writeHead(404, {"Content-Type": "text/plain"}); 
  response.write("404 Not found"); 
  response.end(); 
  } 
} 
exports.route=route;

requestHandlers.js

//var querystring = require("querystring"); 
 
function start(response,postData) { 
 console.log("Request handler 'start' was called."); 
 
 var body = '<html>'+ 
  '<head>'+ 
  '<meta http-equiv="Content-Type" content="text/html; '+ 
  'charset=UTF-8" />'+ 
  '</head>'+ 
  '<body>'+ 
  '<form action="/upload" method="post">'+ 
  '<textarea name="text" rows="20" cols="60"></textarea>'+ 
  '<input type="submit" value="Submit text" />'+ 
  '</form>'+ 
  '</body>'+ 
  '</html>'; 
 
  response.writeHead(200, {"Content-Type": "text/html"}); 
  response.write(body); 
  response.end(); 
} 
 
function upload(response,postData) { 
 console.log("Request handler 'upload' was called."); 
 response.writeHead(200, {"Content-Type": "text/plain"}); 
 response.write("You've sent: " + postData); 
 response.end(); 
} 
 
exports.start = start; 
exports.upload = upload;

运行:node mynode/index

浏览器输入http://localhost:5656/

详解Node.Js如何处理post数据

结果:

详解Node.Js如何处理post数据

在文本框里输入“I LOVE YOU” 点击提交

详解Node.Js如何处理post数据

详解Node.Js如何处理post数据

使用querystring模块只提取文本,修改一下requestHandlers.js使只返回文本

var querystring = require("querystring"); 
 
function start(response,postData) { 
 console.log("Request handler 'start' was called."); 
 
 var body = '<html>'+ 
  '<head>'+ 
  '<meta http-equiv="Content-Type" content="text/html; '+ 
  'charset=UTF-8" />'+ 
  '</head>'+ 
  '<body>'+ 
  '<form action="/upload" method="post">'+ 
  '<textarea name="text" rows="20" cols="60"></textarea>'+ 
  '<input type="submit" value="Submit text" />'+ 
  '</form>'+ 
  '</body>'+ 
  '</html>'; 
 
  response.writeHead(200, {"Content-Type": "text/html"}); 
  response.write(body); 
  response.end(); 
} 
 
function upload(response,postData) { 
 console.log("Request handler 'upload' was called."); 
 response.writeHead(200, {"Content-Type": "text/plain"}); 
 response.write("You've sent: " + querystring.parse(postData).text); 
 response.end(); 
} 
 
exports.start = start; 
exports.upload = upload;

重新启动,依旧输入I LOVE YOU ,提交

详解Node.Js如何处理post数据

总结

以上就是这篇文章的全部内容了,希望这篇文章的内容对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
javascript插入样式实现代码
Feb 22 Javascript
Jquery Ajax方法传值到action的方法
May 11 Javascript
jQuery中:checked选择器用法实例
Jan 04 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
May 19 Javascript
在AngularJS中使用jQuery的zTree插件的方法
Apr 21 Javascript
Jquery和JS获取ul中li标签的实现方法
Jun 02 Javascript
Bootstrop实现多级下拉菜单功能
Nov 24 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
Jan 21 Javascript
Nuxt升级2.0.0时出现的问题(小结)
Oct 08 Javascript
jQuery轻量级表单模型验证插件
Oct 15 jQuery
ajaxfileupload.js实现上传文件功能
Apr 19 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
Sep 05 Javascript
React Native实现简单的登录功能(推荐)
Sep 19 #Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
Sep 19 #Javascript
BootStrap入门教程(二)之固定的内置样式
Sep 19 #Javascript
BootStrap入门教程(一)之可视化布局
Sep 19 #Javascript
Node.js的基本知识简单汇总
Sep 19 #Javascript
React实现双向绑定示例代码
Sep 19 #Javascript
vue从使用到源码实现教程详解
Sep 19 #Javascript
You might like
在线短消息收发的程序,不用数据库
2006/10/09 PHP
PHP删除特定数组内容并且重建数组索引的方法.
2011/03/25 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
小程序跨页面交互的作用与方法详解
2020/01/07 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[57:38]2018DOTA2亚洲邀请赛3月30日 小组赛A组 OpTic VS OG
2018/03/31 DOTA
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
Flask Web开发入门之文件上传(八)
2018/08/17 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
Python 操作SQLite数据库的示例
2020/10/16 Python
如何查看python关键字
2021/01/17 Python
全球性的奢侈品梦工厂:Forzieri(福喜利)
2019/02/20 全球购物
两则小学生的自我评价分享
2013/11/14 职场文书
校班主任推荐信范文
2013/12/03 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
开业庆典策划方案
2014/02/18 职场文书
我爱我的祖国演讲稿
2014/05/04 职场文书
卫生系统先进事迹
2014/05/13 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
2014年小学工作总结
2014/11/26 职场文书
银行实习推荐信
2015/03/27 职场文书