用户发送数据请求的时候,常见的方式是GET
和POST
请求,无论是发送GET
还是POST
,其数据都在请求内容对象request
中
- 获取
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
模块
querystring
跟http
一样都是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请求的数据,推荐使用第三种
- 获取
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);
- 文件的读写
通过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数据以及如何读取所请求文件并响应的相关内容
网友评论