English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Detailed Explanation of How Node.Js Handles Post Data

Implementation Ideas

Place the callback functions for the data and end events directly in the server. Collect all POST data in the data event callback. When all data is received and the end event is triggered, its callback function calls the request route and passes the data to it. Then, the request route passes the data to the request handler.

Implementation Steps

The first step set the encoding format for receiving data to UTF-8-8The second step registered a listener for the "data" event to collect each new data chunk received and assign it to the postData variable. Finally, in the third step, we moved the call to the request route to the end event handler to ensure it only triggers after all data has been received and only triggers once. We also passed the POST data to the request route.

Example Code

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("utf-8");8"); 
   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; 

Run: node mynode/index

Enter http: in the browser//localhost:5656/

Result:

Enter "I LOVE YOU" in the text box and click submit

Use the querystring module to extract text only, modify requestHandlers.js to return text only

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; 

Restart, still input I LOVE YOU, submit

Summary

That's all for this article. I hope the content of this article will be helpful to everyone's learning or work. If you have any questions, you can leave a message for communication.

You May Also Like