欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

http基础知识

程序员文章站 2022-07-10 14:14:03
...

在node中创建一个服务器步骤

  1. const http=require('http'); 导入http模块
  2. const app=http.creatServer();创建服务器对象
  3. app.on(event,(req,res)=>{})添加事件,request请求事件,后面的回调函数,req就是request缩写,res就是respones缩写,在回调函数内可以写一系列相关的响应
  4. app.listen(prot)添加监听服务器端口事件,prot就是端口号,为数字,一般是3000

回调函数中res req的属性和方法

res.writeHead(),第一个参数为状态码,第二个参数是一个对象,设置返回一些内容的设置
res.end();在页面上写入口号里面的内容
req.url: 获得端口号后面的字符串
req.method:获得请求端口的方式

get请求参数

get请求方式会将一些数据显示在网址后面,然后就可以通过一些操作拿到这些数据
为了方便拿到这些数据,我们使用url模块
const url=require('url');
let {pathname,query}=url.parse(req.url,true);
上面这一行代码的意思是:url.parse回将req.url转为一个对象的形式,这个对象里有很多的属性,不清楚可以试着打开看看,true表示及将网址后面的数据进行对象化,然后=左边的对右边的进行对象解构,这样就可以拿到一些你想要的数据了
pathname就是网址后面的路径
query就是路径后面的数据,这是你进行提交的数据

一段完整的代码

//导入http模块
const http = require('http');
//导入url模块
const url=require('url');
//创建服务器对象
const app = http.createServer();

//添加事件
app.on('request', (req, res) => {
    res.writeHead(200,{  //设置状态码
    //设置内容的类型为html类型,默认为文本类型,第二个是设置编码类型,为utf8
        'content-type':'text/html;charset=utf8'
    });
    let {pathname,query}=url.parse(req.url,true);
    if(req.url == '/index'||req.url=='/'){
        res.end('<h1>welcome to homepage</h1>');
    }else if(req.url == '/list'){
        res.end('<h2>hello</h2>');
    }else{
        res.end('<b>sorry not found</b>');
    }
    if(req.method=='POST'){
        res.end('-----post')
    }else if(req.method=='GET'){
        res.end('----GET');
    }

});
//添加监听服务器端口
app.listen(3000);

post请求参数

post与get是两个完全不一样的,post是通过事件来传数据的,比如

const http=require('http');
const app=http.createServer();
const queryString=require('querystring');//这是一个插件,专门把数据转为对象的,方便开发者操作
app.on('request',(req,res)=>{
	//post参数市通过事件的方式接受的
    req.on('data',params=>{  //当有请求参数传递的时候就会触发data事件
//当你提交的数据过多时post不会一下子就把你的数据传递过去,它是一部分一部分的传的
        parmsData+=params;   //通过字符串拼接的方式来把每次提交的数据连在一起
    });
    req.on('end',()=>{  //当参数传递完成后就会触发end事件
        let username=queryString.parse(parmsData).username;
        // 通过querystring来将数据转换为对象,在获取数据
        let userpwd=queryString.parse(parmsData).userpwd;

        console.log(username,userpwd[userpwd.length-1]);
    });
    res.end('ok');
});
app.listen(3001);
console.log('服务器请求成功');

静态资源访问

解释以下url的组成:
传输协议//服务器ip或域名:端口/资源所在位置标识
http//www.baidu.com/?aldtype=16047#auto/zh
静态资源访问就是根据用户在客户端输入的资源位置而打开服务器端所对应的文件,然后服务器端在发送给客户端;
1,我们需要先获取用户输入的资源位置标识
2,根据用户输入的资源位置标识与我们本地的路径进行拼接(因为在我们本地文件的路径比较复杂,用户不可能全部记住,所以我们缩短资源标识,然后再在后台进行拼接,方便用户访问)
3,读取文件,先判断err是否为null,不为null就给用户提示所路径不对
4,如果读取成功,把页面发送给客户端
完整代码

const http=require('http');
const url=require('url');
const path=require('path');
const fs=require('fs');
const mime=require('mime'); //这个是检查用户当前打开的文件是什么类型的
//这个插件需要安装,npm install mime
const app=http.createServer();


app.on('request',(req,res)=>{
    let pathname=url.parse(req.url).pathname;
 //因为方便用户访问,再用户输入我们的域名的时候就可以让用户访问到我们的页面
    pathname=pathname=='/'?'/default.html':pathname;

    let realPath=path.join(__dirname,'public'+pathname);//进行路径拼接
   let type= mime.getType(realPath); //使用插件,回去打开文件所需要的编码类型
   
    fs.readFile(realPath,(err,doc)=>{
        if(err!=null){
            res.writeHead(404,{'content-type':'text/html;charset=utf8'});
   	//这里需要设置编码类型,否者提示信息会乱码
            res.end('文件读取失败');
            return;
        }else{
            res.writeHead(200,{'content-type':type});
            res.end(doc);
        }
    });
});
app.listen('3000');
console.log('服务器启动成功');