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里面写文件的相对地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/435869.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何远程访问电脑文件?

远程访问电脑文件是当今数字化时代中十分常见且实用的技术。它允许我们从任何地方的计算机或移动设备访问和操作我们的电脑中的文件。无论是远程工作、远程学习、远程协作还是方便地获得自己计算机上的重要文件&#xff0c;远程访问电脑文件都为我们提供了巨大的便利。 在远程访…

Netty架构

Netty逻辑架构 Netty 的逻辑处理架构为典型网络分层架构设计&#xff0c;网络通信层、事件调度层、服务编排层。 一、 网络通信层 网络通信层的职责是执行网络 I/O 的操作。它支持多种网络协议和 I/O 模型的连接操作。当网络数据读取到内核缓冲区后&#xff0c;会触发网络事件…

为什么猫咪主食冻干价格相差那么大?性价比高的主食冻干分享

养猫知识的不断普及&#xff0c;让主食冻干喂养逐渐受到铲屎官的青睐。但价格仍是部分铲屎官的顾虑。像我这样的资深猫友&#xff0c;早已开始尝试主食冻干喂养。虽然价格稍高&#xff0c;但其为猫咪带来的实际好处是远超其价格的。 作为一个多猫家庭的铲屎官&#xff0c;纯主食…

贝叶斯树定义与构建的寻行数墨

Title: 贝叶斯树定义与构建的寻行数墨 —— Notes for “The Bayes Tree: An Algorithmic Foundation for Probabilistic Robot Mapping” 文章目录 I. 前言II. 贝叶斯树的定义1. 贝叶斯树的背景2. 贝叶斯树的特点3. 贝叶斯树的定义 III. 贝叶斯树的构建1. 贝叶斯树的构建算法2…

springboot源码解析之Model和Map参数解析

springboot源码解析之Model和Map参数解析 标签:源码:springboot 测试代码 Controller public class HelloController {RequestMapping("/helloModelAndMap")public String helloModelAndMap(HttpServletRequest request, Model model, Map<String, Object> …

鸿蒙文章专题-2021年鸿蒙相关的文章废弃

#原因 至于为什么说2021年我的鸿蒙专栏的文章废弃了&#xff0c;只是说没有了参考意义&#xff0c;是因为鸿蒙4.0以前的版本语言从以Java为主过渡为以ArkTS为主。以前的Java版本的工程已经无法再使用了&#xff0c;后续的开发都必须以ArkTS开发语言为主。 其中而且整个项目结构…

Vue深度教程

一、Vue简介 1.简介 2.快速上手 二、基础 1.创建一个Vue应用 2.模板语法 3.响应式基础 4.计算属性 5.Class与 Style绑定 6.条件渲染 7.列表渲染 8.事件处理 9.表单输入绑定 10.生命周期钩子 11.侦听器 12.模板引用 13.组件基础 三、深入组件 1.组件注册 2.Props 3.组件事件 …

vue ui Starting GUI 图形化配置web新项目

前言&#xff1a;在vue框架里面&#xff0c; 以往大家都是习惯用命令行 vue create 、vue init webpack创建新前端项目&#xff0c;而vue ui是一个可视化的图形界面&#xff0c;对于新手来说更加友好了&#xff0c;不但可以创建、管理、还可以更新vue项目&#xff0c;也可以下载…

实现swiper 3d 轮播效果

先上个效果图&#xff0c;代码可以直接拿~ 安装swiper和vue-awesome-swiper 因为项目用的是nuxt2&#xff0c;所以考虑到swiper的兼容问题&#xff0c;选择的是"swiper": “^5.2.0” 首先是安装swiper和vue-awesome-swiper&#xff0c;并指定版本 npm install s…

在 SpringBoot3 中使用 Mybatis-Plus 报错

在 SpringBoot3 中使用 Mybatis-Plus 报错 Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required Caused by: java.lang.IllegalArgumentException: Property sqlSessionFactory or sqlSessionTemplate are requiredat org.springframework.util.Assert.no…

C语言如何设置随机数

本期介绍&#x1f356; 主要介绍&#xff1a;在C语言中如何创建一个随机数。 文章目录 1. rand函数2. srand函数3. time函数4. 设置随机数的范围 1. rand函数 想要生成随机数&#xff0c;就需要用到C语言提供的一个库函数叫rand&#xff0c;这个函数可以生成0~32767范围内的随机…

Ubuntu/Linux系统下Redis的基本操作命令

版本查询 redis-server --version # 或者redis-server -v 如上图所示&#xff0c;redis-server的版本为6.0.9,证明redis已经安装完成。 启动Redis服务 启动命令如下&#xff1a; redis-server启动成功如下所示&#xff1a; 启动过程中遇到如下问题时&#xff0c;杀死指定端…

可调恒定电流稳压器NSI50150ADT4G车规级LED驱动器 提供专业的汽车级照明解决方案

NSI50150ADT4G产品概述&#xff1a; NSI50150ADT4G可调恒定电流稳压器 (CCR) &#xff0c;是一款简单、经济和耐用的器件&#xff0c;适用于为 LED 中的调节电流提供成本高效的方案&#xff08;与恒定电流二极管 CCD 类似&#xff09;。该 (CCR) 基于自偏置晶体管 (SBT) 技术&…

波奇学Linux:信号的发送和保存

信号的发送的对象是pcb task_struct{ int signal; //0000 0000 .... 0001 进程pcb中存在int型的signal来保存信号&#xff0c;用位图的方式&#xff0c;比特位的0&#xff0c;1表示是否收到信号 比特位位置表示信号的编号。 发信号的本质就是修改task_struct的信号位图对应的…

Android 日志原理解析

一、Logcat 二、Dumpsys C:\Users\pengcheng.ding>adb shell dumpsys --help usage: dumpsysTo dump all services. or:dumpsys [-t TIMEOUT] [--priority LEVEL] [--clients] [--dump] [--pid] [--thread] [--help | -l | --skip SERVICES | SERVICE [ARGS]]--help: show…

学生护眼台灯哪种好?揭秘央视公认好用的护眼台灯

现在近视已经成为了普遍的现象&#xff0c;尤其是学生群体&#xff0c;究其原因主要还是长期是电子设备、长时间的用眼疲劳以及不合适的用光环境&#xff0c;很多时候我们不经意的错误习惯都会导致不知不觉中近视。尤其是桌面上的那一盏台灯&#xff0c;如果台灯的质量太差也是…

Java批量操作文件系统

一、实验内容 编写一个文件管理器&#xff0c;实现文件的批量操作。文件管理器具体功能要求如下&#xff1a; 1、用户输入指令1&#xff0c;代表“指定关键字检索文件”&#xff0c;此时需要用户输入检索的目录和关键字&#xff0c;系统在用户指定的目录下检索出文件名中包含…

DataGrip(IDEA 内置)连接 SQL Server

原文&#xff1a;https://blog.iyatt.com/?p14265 测试环境&#xff1a; IDEA 2023.1SQL Server 2022 首先打开 SQL Server 配置管理工具 启用 TCP/IP 打开 Windows 服务管理 在服务列表中找到 SQL Server&#xff08;MSSQLSERVER&#xff09;&#xff0c;右键重新启…

PostgreSQL 安装部署

文章目录 一、PostgreSQL部署方式1.Yum方式部署2.RPM方式部署3.源码方式部署4.二进制方式部署5.Docker方式部署 二、PostgreSQL部署1.Yum方式部署1.1.部署数据库1.2.连接数据库 2.RPM方式部署2.1.部署数据库2.2.连接数据库 3.源码方式部署3.1.准备工作3.2.编译安装3.3.配置数据…

Android视角看鸿蒙第一课(工程目录)

Android视角看鸿蒙第一课&#xff08;工程目录&#xff09; 导读 鸿蒙马上就来了&#xff0c;这个工作很有可能落到Android开发的头上&#xff0c;既是机遇也是挑战&#xff0c;希望能跟上时代的浪潮&#xff0c;迫不得已开始学习鸿蒙开发&#xff0c;顺带分享记录下 我的学…