• 【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事件,监听客户端请求
    • 启动服务
    1. // 导入http模块
    2. const http = require('http');
    3. // 创建服务器实例
    4. const server = http.createServer();
    5. // 通过on方法绑定request事件,监听客户端请求
    6. // 需要传入两个参数,第一个是'requesr'字符串,第二个是监听的回调函数
    7. server.on('request', (req, res) => {
    8. // ...
    9. })
    10. // 服务器启动在指定端口, 并执行回调函数
    11. server.listen(80,() =>{
    12. // ...
    13. })

     2. req 请求对象

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

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

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

     3. res响应对象

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

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

    4. 解决中文乱码问题

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

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

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

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

     返回字符串正常显示:

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

    动态响应内容步骤

    1. const http = require('http');
    2. const server = http.createServer();
    3. server.on('request',(req,res) => {
    4. const url = req.url;
    5. let content = '

      404 Not Found

      '
      ;
    6. if(url === '/' || url === '/index.html'){
    7. content = '

      首页

      '
      ;
    8. }else if(url === '/about.html'){
    9. content = '

      关于页面

      '
      ;
    10. }
    11. res.setHeader('Content-Type', 'text/html;charset=utf-8');
    12. res.end(content);
    13. })
    14. server.listen(8080,() => {
    15. console.log('http server is running at http://127.0.0.1:8080');
    16. })

    默认根地址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 :

  • 相关阅读:
    纵览机器学习前生今世,万字整理谷歌首席科学家 Jeff Dean 一小时演讲
    vue3 框架学习概念笔记
    facebook分享-错误记录
    Docker安装MySql教程步骤
    详解K8S入口Ingerss
    【无标题】小程序条件判断wx:if=“{{indexof.checkFunDic(item.settingId,‘2‘)}}“
    步力宝品牌鞋业商业规划如何迭代升级
    学会编程, 而不是学会Java
    【知识点随笔分析 | 第八篇】什么是布谷鸟过滤器(缓解Redis穿透)
    golang单元测试:testing包的基本使用
  • 原文地址:https://blog.csdn.net/weixin_41950078/article/details/127851182