处理 GET 或 POST 请求发送的数据处理GET请求server中的 request.url会把查询字符串也带过来解决方法:使用url库解析,这样pathname就是查询字符串前面的字符串,url库可以对url进行一些处理,可以取一些主机名,协议之类的数据例如我们接下来将查询字符串解析为键值对的形式:server.js将解析过后的params一层层传到handle里,然后处理交给/api/v1/records 这条路来处理:直接将这个json字符串转化为对象相应给前端结果:var params = url.parse(request.url, true).query;中true这个参数代表返回一个JSON对象形式的字符串(本质上是一个字符串),如果是false,就直接返回完整的查询字符串:如下处理POST在index.html建一个简单的表单发送post请求先进入index.html,再通过表单进入<form action="/api/v1/records" method=“post”> name: <input type=“text” name=“name” /> age: <input type=“text” name=“age” /> <input type=“submit” value=“Submit”> </form>注意:url库只能解析get发送的请求修改代码:var http = require(‘http’);var fs = require(‘fs’);var url = require(“url”)var querystring = require(“querystring”)//querystring用来将post请求中的数据解析为对象function startServer(route, handle) { var onRequest = function(request, response) { var pathname = url.parse(request.url).pathname console.log(‘Request received ’ + pathname); var data = ’’ request.on(’error’,function(err){ console.error(err) }).on(‘data’,function(chunk){ data+=chunk }).on(’end’,function(){ if(request.method === “POST”) {//如果是post请求,就这样处理,还是那传过来的数据都转化为对象,再丢给handle route(handle, pathname, response, querystring.parse(data));//这里将post请求发送来的数据解析为json对象的形式 }else if(request.method === “GET”){//如果是get请求 var params = url.parse(request.url, true).query;//转化为一个json对象(本质上是对象) route(handle, pathname, response, params);//拿到查询字符串 } }) } var server = http.createServer(onRequest); server.listen(3000, ‘127.0.0.1’); console.log(‘Server started on localhost port 3000’);}module.exports.startServer = startServer;post和get请求都ok优化一下程序:var http = require(‘http’);var fs = require(‘fs’);var url = require(‘url’);var querystring = require(‘querystring’);function startServer(route, handle) { var onRequest = function(request, response) { var pathname = url.parse(request.url).pathname; console.log(‘Request received ’ + pathname); var data = [];//将data声明为数组, request.on(“error”, function(err) { console.error(err); }).on(“data”, function(chunk) { data.push(chunk);// }).on(’end’, function() { if (request.method === “POST”) { if (data.length > 1e6) {//判断长度,及时取消响应 request.connection.destroy(); } data = Buffer.concat(data).toString();//使用流 route(handle, pathname, response, querystring.parse(data)); } else { var params = url.parse(request.url, true).query; route(handle, pathname, response, params); } }); }if (data.length > 1e6)科学计数法,如果数据量很大,就把请求取消,不然会增加服务器的负载,使服务器宕机