day2 fs,path,http模块

  1. fs文件系统模块

    fs模块是Nodejs官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。

    ​ 列如:

    • fs.readFile()方法,用来读取指定文件中的内容
    • fs.writeFile(方法,用来向指定的文件中写入内容,注:可以创建文件,但针对不存在的路径,就无法无法创建文件,新内容会覆盖旧内容

    如果要在JavaScript代码中,使用fs模块来操作文件,则需要使用如下的方式先导入它:

    const fs = require('fs');
    
    1.1读写指定文件中的内容
    1. fs.readFile():使用fs.readFile()方法,可以读取指定文件中的内容,语法格式如下:

      fs.readFile(path,[option],callback);
      

      参数解读:
      参数1∶必选参数,字符串,表示文件的路径。
      参数2:可选参数,表示以什么编码格式来读取文件。
      参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。

      //1. 导入fs模块,来操作文件
      const fs = require('fs');
      // 2.调用fs.readFile()方法读取文件
      // 参数1:   读取文件的存放路径
      // 参数2:读取文件的时候采用的编码格式
      // 参数3:回调函数,拿到读取失败和成功的结果 err dataStr
      fs.readFile('./file/text1.txt','utf-8',function(err,dataStr){
          // 2.1打印失败的结果:
          // 如果读取成功:则err=null,dataStr的值为文件中的内容
          // 如果读取失败,否则err=错误对象,dataStr的值为undefine
          // console.log(err);
          // console.log('---------');
          // 2.2打印成功的结果
          // console.log(dataStr);
          //  3.判断读取是否成功,对象转成布尔型是true
           if(err){
               return console.log("读取失败",err.message);
           }else{
               console.log("读取文件成功",dataStr)
           }
      })
      
    2. fs.writeFile()方法,可以向指定未见中写入内容,语法格式如下:

      fs.writeFile(file,data[,option],callback)
      

      参数解读:
      参数1∶必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。[注:写入的路径有这个盘没有文件则会自动创建文件再写入,如果无这个盘,则会写入失败!eg:‘G:/file/2.txt’,电脑无G 盘写入失败]

      参数2:必选参数,表示要写入的内容。[注:这里是覆盖文件中的内容]

      参数3:可选参数,表示以什么格式写入文件内容,默认值是utf-8。

      参数4:必选参数,文件写入完成后的回调函数。

      // 引入fs模块
      const fs = require('fs');
      // fs.writeFile(file,data[,option],callback)
      var string ="这是我写入的内容:fs.writeFile(file,data[,option],callback)";
      // 参数1.表示要写入文件的路径
      // 参数2.表示要写入的内容
      // 参数3.写入格式,默认utf-8
      // 参数4.回调函数
      fs.writeFile('./file/2.txt',string,'utf-8',function(err){
          // 1.如果文件写入成功,err=null
          // console.log(err);
          //2.如果写入失败,err=错误对象
          if(err){
              return console.log("文件写入失败",err.message)
          }
          console.log("写入成功!");
      })
      
    1.2.fs模块-路径动态拼接问题

    在使用fs模块操作文件时,如果提供的操作路径是以./或…/开头的相对路径时,很容易出现路径动态拼接错误的问题

    原因:代码在运行的时候,执行node命令时所处的目录加上被执行文件所在当前目录下的路径,两者动态拼接出被操作文件的完整路径

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    出现路径拼接错误的问题,是因为提供了./或…/相对路径,解决方法:提供完整绝对路径,但缺点:移植性非常差、不利于维护,

    那如何克服带来的缺点,而又解决问题:__dirname(表示当前文件所在的目录)+文件路径:

const path = require('path');
// fs.readFile(__dirname+'./file/2.txt');
fs.readFile(path.join(__dirname,'./file/2.txt'),'utf8',function(err,dataStr){})
  1. path路径模块

    path模块是Node.js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。

    • path.join()方法:将多个路径片段拼接成一个完成的路径字符串

    • path.basename()方法:用来从路径字符串中,将文件名解析出来

      const path = require('path');
      // 定义文件的存放路径
      const fpath = "/a/b/c/d/index.html";
      const filename1 = path.basename(fpath);
      const filename2 = path.basename(fpath,'.html');
      console.log(filename1,filename2);
      
    函数名参数列表返回值备注作用
    path.join([…path])可以传多个路径片段[…path]String…/可以抵消前面的路径 ;注意:今后凡是设计到路径拼接的操作都要使用path.join()方法进行出路。不要直接使用+好进行字符串的拼接拼接多个路径
    path.basename(path[,ext])path:必选参数,路径字符串;ext:可选参数,表示文件拓展名String,返回路径中最后一部分,一般是路径中的文件名获取路径中的文件名
    path.extname(path)path:必选参数,表示路径的字符串String获取路径中拓展名的部分
  2. http模块
    3.1服务器与客户端

    在网络节点中,负责消费资源的电脑,叫做客户端

    负责对外提供网络资源的电脑,叫做服务器

    http模块是Node.js官方提供的、用来创建web服务器的模块。通过http模块提供的http.creatServer()方法,就能把一台普通电脑变成一台web服务器,从而对外提供web资源服务。

    服务器和普通电脑的区别:服务器上安装了web服务器软件,例如:IIS、Apache等。通过安装这些服务器软件,就能把一台普通的电脑变成一台web服务器。
    在Node,js 中,我们不需要使用lIS、Apache等这些第三方web服务器软件。因为我们可以基于Node,js提供的http模块,通过几行简单的代码,就能轻松的手写一个服务器软件,从而对外提供web 服务

    IP地址和域名是一一对应的关系,这份对应关系存放在一种叫做域名服务器(DNS,Domain name server)的电脑中。使用者只需通过好记的域名访问对应的服务器即可,对应的转换工作由域名服务器实现。因此,域名服务器就是提供IР地址和域名之间的转换服务的服冬器

    注:在开发测试期间,127.0.0.1对应的域名是localhost,它们都代表我们自己的这台电脑,在使用效果上没有任何区别。

    3.2端口号

    在一台电脑中,可以运行成百上千个web服务。每个web服务都对应一个唯一的端口号。客户端发送过来的网络请求,通过端口号,可以被准确地交给对应的 web 服务进行处理。

    注:

    1. 每个端口号不能同时被多个web服务占用
    2. 在实际应用中,URL中的80端口可以被省略
    3.3创建基本web服务器
    1. 导入http模块

    2. 创建web服务器实例:http.creatserve

    3. 为服务器实例绑定request事件,监听客户端的请求

    4. 启动服务器:调用服务器实例的.listen()方法,即可启动当前的web服务器实例

      注:ctl+c停止终端的服务器

      // 1导入http模块
      const http = require('http');
      // 2.创建web服务器实例
      const server = http.createServer();
      // 3.为服务器实例绑定request事件,监听客户端的请求
      server.on('request',(req,res)=>{
          console.log("有人访问我们的服务器!")
      })//第一个参数事件名称,第二个参数回调函数
      // 4.启动服务器,参数一:端口号,参数二:成功之后的回调函数
      server.listen(8080,()=>{
          console.log("服务器运行在ip:127.0.0.1:8080")
      })
      
    3.4request对象

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

    const http = require('http');
    const server = http.createServer();
    // req是请求对象,包涵了与客户端相关的属性和数据
    // 为服务器实例绑定request事件,监听客户端请求
    server.on('request',(req,res)=>{
        // req.url是客户端的请求的url地址
        // req.method是客户端的请求的method类型
        const {url,method} =  req;
        const str = `Your request url is ${url},and request method is ${method}`
        console.log(str)
        // 调用res.end()方法,向客户端相应一些内容
        res.end(str);
    })
    server.listen(8080,()=>{
        console.log("服务器运行在ip:127.0.0.1:8080")
    })
    
    3.5res

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

    解决中文乱码问题:

     // 为了方式中文乱码问题,调用 res.setHeader()方法,设置Content-Type响应头,解决中文乱码问题
        res.setHeader('Content-Type','text/html;charset=utf-8')
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要在jupyter中创建一个名为"学习python"的包,具体步骤如下: 1. 打开jupyter notebook,进入到你想要创建包的目录下。 2. 在terminal中输入以下命令,创建一个名为"学习python"的文件夹并进入该文件夹: ``` mkdir 学习python cd 学习python ``` 3. 在terminal中输入以下命令,创建一个名为"day1"的模块并打开该模块: ``` touch day1.py jupyter notebook day1.py ``` 4. 在day1模块中编写模块A1的内容,并在每行代码的前面加上注释。例如: ```python # day1模块 def add_numbers(a, b): # 这个函数用来求两个数的和 return a + b def multiply_numbers(a, b): # 这个函数用来求两个数的积 return a * b ``` 5. 在day1模块中导入day2模块的Human类,并编写调用该类的代码。例如: ```python # day1模块 from day2 import Human def greet(name): # 这个函数用来向指定的人打招呼 person = Human(name) print("Hello, " + person.name + "!") ``` 6. 在terminal中输入以下命令,创建一个名为"day2"的模块并打开该模块: ``` touch day2.py jupyter notebook day2.py ``` 7. 在day2模块中编写模块A2的内容,并在每行代码的前面加上注释。例如: ```python # day2模块 class Human: # 这个类用来表示一个人,有名字和年龄属性 def __init__(self, name, age=0): self.name = name self.age = age def say_hello(self): # 这个方法用来向别人打招呼 print("Hello, my name is " + self.name + ".") ``` 8. 保存day1和day2模块,并退出jupyter notebook。 接下来,我们就可以在另一个文件中调用这些模块了。例如,我们可以在一个名为"test.py"的文件中编写以下代码: ```python # test.py from 学习python.day1 import add_numbers, multiply_numbers, greet # 调用day1模块的函数 sum = add_numbers(3, 4) print("The sum of 3 and 4 is " + str(sum) + ".") product = multiply_numbers(3, 4) print("The product of 3 and 4 is " + str(product) + ".") # 调用day2模块的类 person = Human("Alice", 25) person.say_hello() # 调用day1模块中调用day2模块的代码 greet("Bob") ``` 运行以上代码,输出结果应该为: ``` The sum of 3 and 4 is 7. The product of 3 and 4 is 12. Hello, my name is Alice. Hello, Bob! ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值