node模块分类

模块

分类

在node种有很多模块,有我们自己写的javascript文件,也会有javascript自带的,还有我们可以下载别人写好的javascript。主要分为三大类。

1. 内置模块

  • 在安装node的时候就自带的模块,比如说http、fs、path等。
  • 内置模块一般在我们安装node的目录中,如果是默认安装,一般在C:\Program Files\nodejs\node_modules\npm\node_modules
  • 引入内置模块require里面只需要写模块名称,node会自动给你找到模块的文件
util模块使用
  • Node中的工具方法模块
    • util.inspect是一个将任意对象转成为字符串的方法,通常用于调试和错误的输出
        const util = require('util')
        const obj = [
            {
                a: {
                    b: {
                        c: 2
                    }
                }
            }
        ]
        console.log(obj) // 带颜色,看不到最深的层级
        console.log(util.inspect(obj, false, 10)) // 不带颜色,查看更深的层级
    
http模块的使用
  • Node中提供了http模块,其中封装了高效的http服务器和http客户端(既可以作为客户端也可以作为服务端)
    • 创建一个的HTTP服务器
      • 使用http.Server类
          const http = require('http')
          // 创建一个实例
          const server = new http.Server()
          // 接受用户的请求
          server.on('request', (req,res)=>{
              // 查看前端请求地址、请求方式、请求头
              console.log(req.url)
              console.log(req.method)
              console.log(req.headers)
              // 书写响应状态码和响应的数据格式
              res.writeHead(200, {'Content-Type': 'text/html'})
              // 返回响应的内容
              res.write('hello world');
              // 结束响应,否则会一直等待结束
              res.end()
          })
          // 每启动一个服务都需要有一个端口号支持 此处我们使用的8080端口号
          server.listen(8080, ()=> {
              console.log('服务已在localhost:8080启动')
          })
      
      • 使用http.createServer方法
          const http = require('http')
          const con = http.createServer((req,res)=>{
              // 查看前端请求地址、请求方式、请求头
              console.log(req.url)
              console.log(req.method)
              console.log(req.headers)
          // 书写响应状态码和响应的数据格式
          res.writeHead(200, {'Content-Type': 'text/html'})
          // 返回响应的内容
          res.write('hello world');
          // 结束响应,否则会一直等待结束
          res.end()
          })
          // 每启动一个服务都需要有一个端口号支持 此处我们使用的8081端口号
          con.listen(8081, ()=> {
              console.log('服务已在localhost:8081启动')
          })
      
      • 接受get请求发送过来的数据,get请求的参数都是拼接在地址后面,Nodejs的url模块中的parse函数提供了这个功能
          const http = require('http')
          const url = require('url')
          http.createServer((req, res) => {
              // get方式在url地址后面,我们可以通过截取
              console.log(req.url)
              // 截取参数部分通过url模块
              console.log(url.parse(req.url).search)
              // 书写响应状态码和响应的数据格式
              res.writeHead(200, { 'Content-Type': 'text/html' })
              // 返回响应的内容
              res.write('hello world');
              res.end()
          }).listen(8080, () => {
              console.log('服务已在8080启动')
          })
      
      • 接受post请求发送过来的数据,post请求的参数是在请求体里面,获取需要一段一段接受,Nodejs里面querystring模块parse函数可以解析获取到的数据
          <!-- 前端表单的方式模拟post请求 -->
          <form action="http://localhost:8080" method="post">
              <input type="text" name="username">
              <input type="password" name="password">
              <button>提交</button>
          </form>
      
          const http = require('http');
          const querystring = require('querystring')
          http.createServer((req, res) => {
              // post接受数据的方式是以流方式接收 一段一段接收
              // 定义一个变量用来保存所有数据
              let postData = ''
              req.on('data', function(chunk){
                  console.log(chunk);
                  // 将每一段数据拼接保留
                  postData+=chunk
              })
              // 当我们将整个数据接受结束之后会执行这个函数
              req.on('end', function(){
                  // 最终我们接受到的数据就是完整的数据
                  console.log(postData)
                  // 但是这个数据现在是字符串的格式
                  console.log(typeof postData)
                  // 需要利用node中自带模块querystring解析
                  const data = querystring.parse(postData)
                  console.log(data)
                  // 这样我们就可以使用这个数据了
                  console.log(data.username)
                  console.log(data.password)
              })
              // 书写响应状态码和响应的数据格式
              res.writeHead(200, { 'Content-Type': 'text/html' })
              // 返回响应的内容
              res.write('hello world');
              res.end()
          }).listen(8080, () => {
              console.log('服务已在8080启动')
          })
      
    • http.request是一个HTTP客户端工具
      • 利用http.get方法发起get请求,此处以获取千峰官网为例,其实这就可以做个简单的爬虫了
          const http = require('http')
          http.get('http://www.mobiletrain.org/?pinzhuanbdtg=biaoti', (res)=>{
              let html = ''
              res.on('data', (chunk)=>{
                  html+=chunk
              })
              res.on('end', ()=>{
                  console.log(html)
              })
          })
      
      • 利用http.request可以发起post和get请求
          const http = require('http')
          const querystring = require('querystring')
          const postData = querystring.stringify({
              'a': 1
          });
      
          const options = {
              hostname: 'localhost',
              port: 8080,
              path: '/',
              method: 'POST',
              headers: {
                  'Content-Type': 'application/x-www-form-urlencoded',
                  'Content-Length': Buffer.byteLength(postData)
              }
          };
      
          const req = http.request(options, (res) => {
              console.log(`状态码: ${res.statusCode}`);
              console.log(`响应头: ${JSON.stringify(res.headers)}`);
              res.setEncoding('utf8');
              res.on('data', (chunk) => {
                  console.log(`响应主体: ${chunk}`);
              });
              res.on('end', () => {
                  console.log('响应中已无数据。');
              });
          });
          req.on('error', (e) => {
              console.error(`请求遇到问题: ${e.message}`);
          });
          req.end();
      
fs模块的使用
  • fs模块用于对系统文件及目录进行读写操作。

  • fs设计到文件的操作,文件操作会受到文件大小的影响,所以代码执行的时间是无法预估的,node提供了同步和异步的操作方式。

  • 同步

    • fs.mkdirSync 创建目录
    • fs.rmdirSync 删除目录
  • 异步

    • fs.mkdir 创建目录
          const fs = require('fs')
          fs.mkdir('./logs', function(err){
              console.log('done...')
          })
      
    • fs.rmdir 删除目录
          const fs = require('fs')
          fs.rmdir('./logs', function(err){
              console.log('done...')
          })
      
    • fs.readFile 读取文件
          // 使用回调函数
          var fs=require("fs");
          fs.readFile("E:\\test\\test10\\server\\config.json","utf8",function(err,data){
              console.log(err);
              console.log(data.toString());
          })
      
          // 使用promise方式
          const fs = require('fs')
          function getText(){
              return new Promise((resolve,reject)=>{
                  fs.readFile('./logs/log-0.txt', 'utf-8', function(err,data){
                      if(err) reject(err)
                      resolve(data)
                  })
              })
          }
          getText().then(res=>{
              console.log(res)
          })
      
          // 使用async await方式
          const fs = require('fs')
          function getText(){
              return new Promise((resolve,reject)=>{
                  fs.readFile('./logs/log-0.txt', 'utf-8', function(err,data){
                      if(err) reject(err)
                      resolve(data)
                  })
              })
          }
          async function fn(){
              const res = await getText()
              console.log(res)
          }
          fn()
      
    • fs.writeFile 写入文件 文件不存在会自动创建 会覆盖之前文件内容
          fs.writeFile('a.txt', '文本内容', 'utf8', function(err){
          });
      
    • fs.appendFile 追加写入文件 文件不存在会自动创建 会在原来内容的后面追加
          fs.appendFile('a.txt', '文本内容', 'utf8', function(err){
          });
      
path模块的使用
  • node为了解决本地路径提出的一个方法集

  • 属性

    • __dirname 获取当前运行文件的文件夹地址
    • __filename 获取当前运行文件的文件名地址
  • 方法

    • path.join 使用平台特定的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。
        const path = require('path');
        const str=path.join('/foo', 'bar', 'baz/asdf');
        console.log(str);
    
    • path.basename 返回路径中最后的部分,可以去掉扩展名。
        var str=path.join('/foo', 'bar', 'baz/asdf.txt');
        console.log(path.basename(str));
        console.log(path.basename(str,".txt"))
    
    • path.dirname 返回路径中目录名
        var str=path.join('/foo', 'bar', 'baz/asdf.txt');
        console.log(path.dirname(str));
    
    • path.extname 返回路径中的扩展名
        var str=path.join('/foo', 'bar', 'baz/asdf.txt');
        console.log(path.extname(str));
    
    • path.resolve 相当于cd命令
        path.resolve(__dirname, '..')
    
    • path.parse 将字符串对象转换为对象
        const path = require('path');
        var str='D:\\node\\qf-admin\\logs\\log-0.txt';
        console.log(path.parse(str)); 
        /* 
            {
                root: 'D:\\',
                dir: 'D:\\node\\qf-admin\\logs',
                base: 'log-0.txt',
                ext: '.txt',
                name: 'log-0'
            }
        */
    
    • path.format 将path对象转换为字符串
        var str=path.join('/foo', 'bar', 'baz/asdf.txt');
        var obj=path.parse(str);
        console.log(path.format(obj))
    
url模块的使用
  • node为了解决线上地址提出的一个方法
  • 方法
    • url.parse(网址) 将一个网址解析成一个对象,对象里面的key就是网址各个组成部分
          const url = require('url');
          console.log(url.parse('https://jack:123456@www.baidu.com:443/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_btype=t&inputT=3647&rsv_sug3=20#hash'))
      
         const url = require('url');
         console.log(url.parse('https://jack:123456@www.baidu.com:443/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_btype=t&inputT=3647&rsv_sug3=20#hash', true))
      
    • url.format(对象) 将一个对象转换成网址
          const url = require('url');
          var urlObj = {
              protocol: 'https:',
              slashes: true,
              auth: 'jack:123456',
              host: 'www.baidu.com:443',
              port: '443',
              hostname: 'www.baidu.com',
              hash: '#hash',
              search: '?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_btype=t&inputT=3647&rsv_sug3=20',
              query: 'ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_btype=t&inputT=3647&rsv_sug3=20',  
              pathname: '/s',
              path: '/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_btype=t&inputT=3647&rsv_sug3=20',
              href: 'https://jack:123456@www.baidu.com:443/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_btype=t&inputT=3647&rsv_sug3=20#hash'
          }
          console.log(url.format(urlObj))
      
    • url.resolve 返回从根目录指定到当前目录的绝对路径url。返回结果去除参数和锚点,返回结果标准url路径格式
          var url=require('url');  
          //指定相对路径  
          var url1=url.resolve('http://qingk.cn/one/two/three','four');  
          console.log(url1); //http://qingk.cn/one/two/four  
          //指定根目录的相对路径  
          var url3=url.resolve('http://qingk.cn/one/two/three','/four');  
          console.log(url3); //http://qingk.cn/four  
          //带参数的相对路径  
          var url2=url.resolve('http://qingk.cn/one/two/three?name=zhangsan','four');  
          console.log(url2); //http://qingk.cn/one/two/four  
          //非标准分隔符的原路径  
          var url4=url.resolve('http://qingk.cn\\one#name1','/four');  
          console.log(url4);//http://qingk.cn/four  
          //非标准分隔符的相对路径  
          var url5=url.resolve('http://qingk.cn/one','\\two\\three');  
          console.log(url5);//http://qingk.cn/two/three 
              ```
      
querystring的使用
  • node中处理地址参数的模块
  • querystring.parse 把一个URL参数解析成一个键值对的集合
        const queryStr = require('querystring')
        let url = 'name=lxc&age=20&height=&weight=120'
        console.log(queryStr.parse(url))
    
  • querystring.stringify 此方法是 querystring.parse方法的逆向操作
  • querystring.escape 对传入的字符串进行编码
        console.log(queryStr.escape('name=lxc&age=20'))
    
  • querystring.unescape 对传入的字符串进行解码
        console.log(queryStr.unescape('name%3Dlxc%26age%3D20'))
    

2. 第三方模块

  • 第三方模块也称为第三方依赖,一般我们使用的时候需要下载,然后才能使用
  • 下载也不需要我们自己去网上找然后下载,只需要通过npm工具
  • 比如说我们后来会使用到的mysql,默认node并没有自带,用的时候需要安装
  • 引入第三方模块require里面也只需要写模块名称,node会自动给你找到模块的文件

3. 自定义模块

  • 自定义模块是我们自己实现业务逻辑的javascript文件
    og(queryStr.escape(‘name=lxc&age=20’))
  • querystring.unescape 对传入的字符串进行解码
        console.log(queryStr.unescape('name%3Dlxc%26age%3D20'))
    

2. 第三方模块

  • 第三方模块也称为第三方依赖,一般我们使用的时候需要下载,然后才能使用
  • 下载也不需要我们自己去网上找然后下载,只需要通过npm工具
  • 比如说我们后来会使用到的mysql,默认node并没有自带,用的时候需要安装
  • 引入第三方模块require里面也只需要写模块名称,node会自动给你找到模块的文件

3. 自定义模块

  • 自定义模块是我们自己实现业务逻辑的javascript文件
  • 引入自定义模块需要在require里面写文件的相对地址
  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦逼的猿宝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值