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

实现思路

将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/

结果:

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

使用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 ,提交

总结

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索post
, nodejs
, 数据
, 获取post数据
nodejs处理post请求
nodejs处理post请求、nodejs 处理post、node处理post请求、nodejs post 参数、node.js post 请求,以便于您获取更多的相关知识。

时间: 2024-12-30 17:47:45

详解Node.Js如何处理post数据_node.js的相关文章

详解智能交通应用大数据“三重门”

文章讲的是详解智能交通应用大数据"三重门",武汉市悬在路口立杆上的金属小盒子--超级电子眼3个月抓了13万起交通违法,逆行.压线.套牌一眼识别,并能自动报警. 只需10秒,重庆市凭借280万多张"电子牌"的信息传递,各地的道路拥堵信息即可传递到设置在附近的交通诱导屏上. 400多个公交站点,1000多辆公交车, 80多条公交线路,全部被江苏省镇江市交通系统中央指挥中心的工作人员透过实时全景视图,实时监控.出行者随时可获得公交时刻信息和延误预报-- 全国智能交通(IT

详解Node.js包的工程目录与NPM包管理器的使用_node.js

工程目录 了解了以上知识后,现在我们可以来完整地规划一个工程目录了.以编写一个命令行程序为例,一般我们会同时提供命令行模式和 API 模式两种使用方式,并且我们会借助三方包来编写代码.除了代码外,一个完整的程序也应该有自己的文档和测试用例.因此,一个标准的工程目录都看起来像下边这样. - /home/user/workspace/node-echo/ # 工程目录 - bin/ # 存放命令行相关代码 node-echo + doc/ # 存放文档 - lib/ # 存放API相关代码 echo

详解Node.js如何开发命令行工具_node.js

前言 Node 给前端开发带来了很大的改变,促进了前端开发的自动化,我们可以简化开发工作,然后利用各种工具包生成生产环境.如运行sass src/sass/main.scss dist/css/main.css即可编译 Sass 文件. 在实际的开发过程中,我们可能会有自己的特定需求, 那么我们得学会如何创建一个Node命令行工具. hello world 老规矩第一个程序为hello world.在工程中新建bin目录,在该目录下创建名为helper的文件,具体内容如下: #!/usr/bin

详解Node.js模块间共享数据库连接的方法_基础知识

这个标题本身就是一个命题,因为使用默认方式的情况下,一个 Node.js 应用里的各个模块都是共享的同一个数据库连接.但是如果姿势不对,可能会很丑陋,甚至可能会出错. 你可以忽略下面这部分,直接切入正题. 背景最近在做专业课程设计,题目是"机票预订管理系统".需求比较简单,就试着拿最近在学的 Node.js 来做了.本来还在调研用何种 Node.js 框架比较合适,看了几个框架之后发现这是杀鸡用牛刀,有看文档查资料的时间还不如直接动手写了.最后写完我会把代码放到 Github 上,欢迎

深入理解Node.js的HTTP模块_node.js

前言 我们知道传统的HTPP服务器会由Aphche.Nginx.IIS之类的软件来担任,但是nodejs并不需要,nodejs提供了http模块,自身就可以用来构建服务器,而且http模块是由C++实现的,性能可靠.其中封装了一个高校的HTTP服务器和一个简单的HTTP客户端.http.Server是一个基于事件的HTTP服务器:http.request则是一个HTTP客户端工具,用于向HTTP服务器发送请求,实现内容抓取. 一. HTTP服务器 http.Server提供一套封装级别很低的AP

代码详解:ASP读取XML数据文件的方法

xml|数据|详解 分别保存下面两段代码,一个保存为readxml.asp另一个保存为test.xml,放在同一个目录下面,调试程序即可,在程序里面我已经做了解释,读取代码可以做成一个readxml的函数,通过使用输入的参数而读取xml不同数据记录的不同的值.这段程序的改编来自互联网,有什么出入请见谅. readxml.asp<%dim xml,objNode,objAtr,nCntChd,nCntAtrSet xml=Server.CreateObject("Microsoft.XMLD

《策略驱动型数据中心——ACI技术详解》——第1章 数据中心架构考虑因素1.1 应用和存储

第1章 数据中心架构考虑因素 本章介绍数据中心架构所需考虑的因素.其中将介绍设计时的考虑因素和设计过程中使用的方法,以便对于数据中心矩阵项目,使架构师能高效地选择端到端的网络设计,为其演进提供所需的增长能力. 在数据中心网络设计过程中,在架构选择和最终设计方面需要注意以下一些关键考虑因素. 要托管在数据中心的应用和这些应用将使用的存储类型. 数据中心的需求和限制,包括物理决策和POD模型. 不同类型的数据中心设计. 大多数的数据中心矩阵部署是用于虚拟化数据中心的.本章还介绍了数据中心的其他应用场

使用node+vue.js实现SPA应用_node.js

业务需求 最近公司要求开发web版的app,由于app是偏向内容方面,而且带了一个聊天模块,所以一般的多页开发不是很适合,而且主要是手机浏览,对加载速度或者用户体验来说都比较苛刻.调研了很多框架和模式,最后自己东拼西凑搞出来了这么一个玩意. 服务端 毫无疑问使用node,使用typescript可以有效的在编码同时查错,强类型语言写服务端毫无压力. #app.ts 只贴重要代码 var webpack = require('webpack') var webpackDevMiddleware =

详解MySQL插入和查询数据的相关命令及语句使用_Mysql

插入数据MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN ); 如果数据是字符型,必须使用单引号或者双引号,如:"value&