nodejs获取GET和POST数据以及读取响应请求文件

2,778 阅读3分钟

用户发送数据请求的时候,常见的方式是GETPOST请求,无论是发送GET还是POST,其数据都在请求内容对象request

  1. 获取GET数据的三种方式

get数据发送的时候都是在request.url中的,request表示请求的内容对象,里面包括了很多请求相关的信息。

方法一:手动切

通过字符串中的split方法url字符串中的请求数据切成json格式

const http=require("http");//引入http模块
http.createServer(function(req,res){//通过http模块对象创建服务器
	//req获取前台发的数据
	var GET ={};
	if (req.url.indexOf('?')!=-1) {
		var arr = req.url.split('?');
		var url=arr[0];//地址
		var arr2 = arr[1].split('&');
		for (var i = 0; i < arr2.length; i++) {
			var arr3 = arr2[i].split('=');
			GET[arr3[0]]=arr3[1];
		}
	}else{
		var url=req.url;
		// GET={}
	}
console.log(url,GET);
res.write("aaa");//响应写在页面上的内容
res.end();//结束响应
}).listen(8080);//要个端口并监听

方法二:使用querystring模块

querystringhttp一样都是node自带的模块,通过querystring自带的parse方法,可以将查询字符串变成json形式

const http = require('http');
const querystring=require('querystring');
http.createServer(function(req,res){
	var GET={};
	if (req.url.indexOf('?')!=-1) {
		var arr=req.url.split('?');
		var url = arr[0];
		GET=querystring.parse(arr[1]);//
	}else{
		var url=req.url;
	}
	console.log(GET);
	res.write('aaaa');
	res.end();
}).listen(8080);

方法三:使用url模块

url也是node自带的一个模块,可以使用url模块中的parse方法,将整个url解析成一个对象,其中query属性对应的就是我们要的GET数据,第二个参数传true会自动解析为json形式

const http = require('http');
const urlLib = require('url');
var GET={};
http.createServer(function(req,res){
	var obj=urlLib.parse(req.url,true);
	var url=obj.pathname;
	var GET=obj.query;

	console.log(url,GET);
	res.write('aaaaa');
	res.end();
}).listen(8080);

以上三种方式获取GET请求的数据,推荐使用第三种

  1. 获取POST请求的数据

GET数据相比,POST数据量大,得分段。通过req.on('data',function(data){})监听,当有一段数据到达的时候执行回调,回调函数参数data为每段达到的数据。当数据全部到达时会触发req.on('end',function(){})里面的回调函数。可以通过querystring.parse(str)解析成我们想要的POST请求数据格式

var http=require('http');
var querystring=require('querystring');
http.createServer(function(req,res){	
	var str='';
	var i=0;
	req.on('data',function(data){
		console.log(`第${++i}次收到数据`);
		str+=data;
	});//当有一段数据到达的时候
	req.on('end',function(){
		var POST=querystring.parse(str);
		console.log(POST);
	});//数据全部到达
}).listen(8080);

  1. 文件的读写

通过fs模块完成文件的读取,里面有个readFile(要读取的文件,回调函数)用于读取文件,读取结束执行回调

针对三种请求:请求文件或者get请求或者post请求,我们来搭建一个完整一点的服务器雏形

//引入相应模块
const http=require('http');//http协议相关
const fs=require('fs');//文件系统相关
const querystring=require('querystring');//查询字符串相关
const urlLib=require('url');//处理url相关

var server=http.createServer(function(req,res){
	//GET
	var obj=urlLib.parse(req.url,true);
	var url=obj.pathname;
	const GET=obj.query;

	//POST
	var str='';
	var POST='';
	req.on('data',function(data){
		str+=data;
	});
	req.on('end',function(){
		POST=querystring.parse(str);
	});
	// console.log(url,GET,POST)

	//文件请求
	var file_name='./www'+url;
	fs.readFile(file_name,function(err,data){
		if (err) {
			res.write("404");
		}else{
			res.write(data);
		}
		res.end();
	});

});

server.listen(8080);//要个端口并且监听该端口

以上就是nodejs如何获取GET和POST数据以及如何读取所请求文件并响应的相关内容