Node-http模块

1.1 什么是http模块

http模块是node.js官方提供的,用来创建web服务器的模块

通过Http模块提供的http.creatServer()

能方便得把一台普通的电脑,变成一台web服务器,对外提供web服务

如果希望使用http模块创建web 服务器,需要先导入它:

const http = require('http');

1.2 服务器相关概念

1.2.1 IP地址

IP地址就是互联网上每天计算机的唯一地址,具有唯一性

只有在知道对方IP地址的前提下,才能进行数据通信

image-20220910140936156

1.2.2 域名和域名服务器

image-20220910141348445

1.2.3 端口号

image-20220910145314203

image-20220910145424878

1.3 创建基本web服务器的步骤

1.3.1 创建web服务器的基本步骤

  1. 导入http模块
  2. 创建web服务器实例
  3. 为服务器实例绑定request事件,监听客户端请求
  4. 启动服务器

第一步:导入http模块

const http = require('http');

第二步:调用http.creatServer()方法,快速创建一个web服务器

const http = require('http');
const server = http.createServer();

第三步:绑定request事件

为服务器实例绑定request事件,即可监听客户端发送过来的网络请求

const http = require('http');
const server = http.createServer();
server.on('request',(req,res) => {
//只要有客户端请求我们自己的服务器,就会触发request事件,从而调用这个时间处理函数
console.log('Welcome to visit my server!');
})
//第一个参数,'requset'是事件的名称,一个字符串
//第二个参数,是触发request事件会执行的一个回调


第四步:启动服务器

调用服务器实例提供的.listen()方法,即可启动但你关卡的web服务器实例:

const http = require('http');
const server = http.createServer();
server.on('request',(req,res) => {
//只要有客户端请求我们自己的服务器,就会触发request事件,从而调用这个时间处理函数
console.log('Welcome to visit my server!');
})
//第一个参数,'requset'是事件的名称,一个字符串
//第二个参数,是触发request事件会执行的一个回调

server.listen(8090,() => {
    console.log('监听8090端口中,访问 http://127.0.0.1:8090 访问网站');
})
// 监听6666端口,监听成功后执行后面的回调函数

image-20220910150824690

运行: node 文件名


1.3.2 req请求对象

只要服务器接收到了客户端的请求,就会调用通过server.on()为服务器绑定的request事件处理函数

如果想在事件处理函数中,访问与客户端相关的数据和属性,可以使用下面的方式

req是请求对象,它包含了与客户端相关的数据和属性,例如:
req.url 是客户端请求的url地址
req.method 是客户端的method请求类型

const http = require('http');
const server = http.createServer();
server.on('request',(req,res)=>{
    // req是请求对象,它包含了与客户端相关的数据和属性,例如:
    // req.url 是客户端请求的url地址
    // req.method 是客户端的method请求类型
    const str =`你请求的Url地址为${req.url},你请求的方式为:${req.method}`;
    console.log(str);
});
server.listen('8090',()=>{
    console.log("listening 8090 port! Visit http://127.0.0.1:8090");
})

1.3.3 res响应对象

const http = require('http');
const server = http.createServer();
server.on('request',(req,res)=>{
// res是响应对象,它包含了与服务器相关的数据和属性,例如:
//要发送到客户端的字符串
const str = `your request url is ${req.url} and request method is ${req.method}`
//res.end()方法的作用
//向客户端发送指定的内容,并结束这次请求的处理过程
res.end(str);
});
server.listen('8090',()=>{
    console.log("listening 8090 port! Visit http://127.0.0.1:8090");
})

image-20220910155136598

1.3.4 解决中文乱码问题 res.setHeader()

当我们使用res.end()方法,向客户端发送中文内容的时候,会出现乱码问题,此时,需要手动设置内容的编码格式

const http = require('http');
const server = http.createServer();
server.on('request',(req,res)=>{
// res是响应对象,它包含了与服务器相关的数据和属性,例如:
//要发送到客户端的字符串
const str = `你的请求地址是 ${req.url} ,请求方法是 ${req.method}`
//res.setHeader设置响应头Content-Type的值
res.setHeader('Content-Type','text/html;charset=utf-8');
//res.end()方法的作用
//向客户端发送指定的内容,并结束这次请求的处理过程
res.end(str);
});
server.listen('8090',()=>{
    console.log("listening 8090 port! Visit http://127.0.0.1:8090");
})

1.4 根据不同的url响应不同的内容

image-20220911085856236

const http = require('http');
const server = http.createServer();
server.on('request', (req, res) => {
    const url = req.url;
    let content = '404 Not Found'; //定义其它目录为404
    if (url === '/' || url === '/index.html') {
        content = '<h1>首页</h1>'; // 用户请求首页内容
    } else if (url === '/about.html') {
        content = '<h1>关于页面</h1>'; //  用户请求关于页面
    }
    res.setHeader('Content-Type','text/html;charset=utf-8')
    res.end(content);
});

server.listen('8090', () => {
    console.log("listening 8090 port! Visit http://127.0.0.1:8090");
})

1.5 自定义静态网站服务器

//导入http,fs,path模块
const http = require('http');
const fs = require('fs');
const path = require('path');

const server = http.createServer();
server.on('request', (req, res) => {
    // 获取到客户端请求的url地址
    const url = req.url;
    // 把请求的Url地址,映射为本地文件的存放路径
    const fpath = path.join(__dirname,'index',url);
    console.log(fpath);
    //根据映射来的文件路径来读取文件
    fs.readFile(fpath, (err, dataStr) => {
        if (err) return res.end('404');
        res.end(dataStr);
    });

});
server.listen(8090, () => {
    console.log('Listening 8090 port!');
})

目录结构如下

image-20220911095750268

效果如下

image-20220911095812883