【Node.js】 第三章 http模块

目录

1.1 什么是http模块

1.2  服务器相关概念

1.3 http模块创建Web服务器

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


1.1 什么是http模块

http模块是Node.js官方提供的,用来创建web服务器的模块。通过http.createServer()方法就可以将一台电脑变成Web服务器,提供对外的资源。

引入方式:

const http = require('http')

Node.js不需要IIS、Apache等第三方软件,通过Node.js提供的http模块,可以仅通过几行代码,就可以把普通电脑变为Web服务器。 

1.2  服务器相关概念

1. IP地址

一台电脑对应一个IP地址

2. 域名和域名服务器

IP地址和域名一一对应,映射表存于DNS域名服务中

3. 端口号

1.3 http模块创建Web服务器

1. 创建步骤

  • 导入http模块
  • 创建http服务器实例
  • 在实例绑定request事件,监听客户端请求
  • 启动服务
// 导入http模块
const http = require('http');
// 创建服务器实例
const server = http.createServer();
// 通过on方法绑定request事件,监听客户端请求
// 需要传入两个参数,第一个是'requesr'字符串,第二个是监听的回调函数
server.on('request', (req, res) => {
    // ...
})
// 服务器启动在指定端口, 并执行回调函数
server.listen(80,() =>{
   // ...
})

 2. req 请求对象

只要服务器接收到了客户端的请求,就会调用server.on()为服务器绑定request事件处理函数,如果想在事件处理函数中,访问客户端相关的数据或属性,可以使用如下方式:

const http = require('http');
const server = http.createServer();
server.on('request',(req) => {
    // req是客户端请求对象,包含了一些客户端相关的属性和数据
    const url = req.url; // 客户端请求url,端口号后的路径
    const method = req.method;// 客户端请求的方法
    console.log(`visit url is ${url}, and request method is ${method}`);
})
server.listen(8080,() => {
    console.log('http server is running at http://127.0.0.1:8080');
})

 把请求地址换成http://127.0.0.1:8080/index.html 、则会再次打印信息,由此可见,req的url属性只包含端口号后的路径

 3. res响应对象

在服务器的request事件处理函数中,如果想访问服务器相关的数据或属性,可以使用如下方式:

const http = require('http');
const server = http.createServer();
server.on('request',(req,res) => {
    const url = req.url;
    const method = req.method;
    const str = `visit url is ${url}, and request method is ${method}`;
    // res.end 方法的作用:向客户端返回指定数据,并结束此次请求
    res.end(str);
})
server.listen(8080,() => {
    console.log('http server is running at http://127.0.0.1:8080');
})

4. 解决中文乱码问题

如果res返回的数据包含中文,返回到页面会出现乱码问题:

server.on('request',(req,res) => {
    const url = req.url;
    const method = req.method;
    const str = `客户端访问的url是 ${url}, 请求的方法是 ${method}`;
    // res.end 方法的作用:向客户端返回指定数据,并结束此次请求
    res.end(str);
})

 乱码问题解决:通过setHeader()方法手动设置内容编码格式:

server.on('request',(req,res) => {
    const url = req.url;
    const method = req.method;
    const str = `客户端访问的url是 ${url}, 请求的方法是 ${method}`;
    // 设置响应头'Content-Type', 内容为'text/html; charset=utf-8'
    res.setHeader('Content-Type', 'text/html; charset=utf-8');
    res.end(str);
})

 返回字符串正常显示:

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

动态响应内容步骤

const http = require('http');
const server = http.createServer();
server.on('request',(req,res) => {
    const url = req.url;
    let content = '<h1>404 Not Found</h1>';
    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(8080,() => {
    console.log('http server is running at http://127.0.0.1:8080');
})

默认根地址http://127.0.0.1:8080和http://127.0.0.1:8080/index.html 返回到结果都是一样的:

  

 请求http://127.0.0.1:8080/about.html地址:

请求不存在但地址http://127.0.0.1:8080/abc.html :

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值