前端开发那些事儿

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

2020-09-06  本文已影响0人  深度剖析JavaScript

用户发送数据请求的时候,常见的方式是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数据以及如何读取所请求文件并响应的相关内容

上一篇 下一篇

猜你喜欢

热点阅读