【学习笔记02】node的模块化和内置模块

news2024/11/25 8:14:21

一、nodejs的模块化

  •  😂 nodejs 所有的东西都是模块

(一)node模块的分类

1. 自定义模块:自己写的模块

2. 内置模块:nodejs提供的模块

3. 第三方模块

       别人写好的东西, 上传到某一个位置(npm),

       我们去 npm 去下载到我们本地, 然后使用

(二)导出语法

  • node中每一个JS 文件都自带一个module
console.log(module);

Module {
  id: '.',
  // 当前文件所在目录
  path: 'E:\\yizhiyang\\JavaScript2\\date1129:认识node\\code',
  // 记录了, 当前文件 导出的内容
  exports: {},
  // 当前文件完整的文件名
  filename: 'E:\\yizhiyang\\JavaScript2\\date1129:认识node\\code\\04_nodejs的模块化.js',
  // 是否被引入
  loaded: false,
  // 表明当前文件导入了什么模块
  children: [],
  paths: [
    'E:\\yizhiyang\\JavaScript2\\date1129:认识node\\code\\node_modules',
    'E:\\yizhiyang\\JavaScript2\\date1129:认识node\\node_modules',
    'E:\\yizhiyang\\JavaScript2\\node_modules',
    'E:\\yizhiyang\\node_modules',
    'E:\\node_modules'
  ]
}

1、导出语法1

  • module.exports.属性名 = 属性值

//在默认对象内添加属性, 导出的还是一个对象
module.exports.num = 100
module.exports.str = 'QF666'
console.log(module)
/*
    Module {
        ...
        exports: { num: 100, str: 'QF666' },
        ...
    }
*/

2、导出语法2

  • module.exports = 新值
  • node中每一个js文件都自带一个exports这个变量,内部存储指向module.exports 这个对象的地址
// 方式2, 重新给默认对象赋值, 导出的就是新的值
module.exports = [100, 200, 300];
console.log(module);

3、导出语法3

  • exports.属性名 = 属性值
// 在默认对象内添加属性, 导出的还是一个对象
exports.num = 999;
exports.str = 'QF666';
console.log(module);

(二)导入语法

  • node中每一个JS文件都自带一个require
  • 语法: require('地址')
  • 返回值: 返回导入的文件的exports 

out.js

module.exports.num = 100
module.exports.str = 'QF666'
module.exports.str2 = 'QF001'

in.js

// const outObj = require('./out.js')
// node 导入文件时, 如果文件后缀是 .js 可以省略不写
const outObj = require('./out');

console.log(outObj);

二、node内置模块fs

  • fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
  • fs.readFile() 方法,用来读取指定文件中的内容  
  • fs.writeFile() 方法,用来向指定的文件中写入内容
const fs = require('fs');
console.log(fs);

1、异步读取文件

fs.readFile('文件路径', '配置项', '回调函数')

        文件路径: 必填

        配置项: 选填(默认值 buffer, 可以手动配置)

        回调函数: 必填

const fs = require('fs');

fs.readFile('./index.txt', 'utf-8', function (err, data) {
    /**
     *  err:  如果读取失败, 会给一个err
     *  data: 读取成功,文件的内容
    */
    console.log(err);   //null
    console.log(data);
})

 报错信息:

  • 我们没有创建index1.txt文档,报错时的信息显示
fs.readFile('./index1.txt', 'utf-8', function (err, data) {
    /**
     *  err:  如果读取失败, 会给一个err
     *  data: 读取成功,文件的内容
    */
    if (err) return console.log(err);
    console.log(data);
})

 2、同步读取文件

const fs = require('fs');
console.log('start');

let data = fs.readFileSync('./index.txt', 'utf-8')
console.log('data');

console.log('end');

 3、异步写入

  • 按照指定第一个参数去书写文件的内容(覆盖)
  • 按照指定的第一个参数没找到, 在指定位置, 新建一个文件出来;新建的值, 就是第二个参数
const fs = require('fs');
fs.writeFile('./index.txt', '你好', function (data) {
    console.log('写入完成')
})

console.log('end')

三、node内置模块path

node给我们提供的操作路径相关的内容

  • 绝对路径:C:/a/b/c/d.html
  • 相对路径:./d.html     ../b/d.html
const path = require("path");

console.log(path);

  • path.join([路径片段1, 路径片段2, 路径片段3])
const path = require("path");

const res1 = path.join("a", "/b", "/c", "/d.html");
console.log(res1); // a\b\c\d.html

const res2 = path.resolve("a", "/b", "/c", "/d.html");
console.log(res2); // C:\d.html

const res3 = path.resolve("q/w/e", "y.html");
console.log(res3); 
// C:\Users\41099\Desktop\GY-2203\07周\02天\code\06_node内置模块path\q\w\e\y.html

const res4 = path.parse(
    'C:/Users/41099/Desktop/GY-2203/07周/02天/code/06_node内置模块path/q/w/e/y.html'
)
console.log(res4)

    {
      // 根路径
      root: 'C:/',
      // 当前文件所在的文件夹(目录)路径
      dir: 'C:/Users/41099/Desktop/GY-2203/07周/02天/code/06_node内置模块path/q/w/e',
      // 完整文件名
      base: 'y.html',
      // 文件后缀
      ext: '.html',
      // 文件名
      name: 'y'
    }

 四、node内置模块url

  •  node给我们提供的帮助我们解析url地址信息
  •  http://localhost:8080/a/b/c/d.html?current=1&pagesize=12
const url = require("url");
console.log(url);

  •  url.parse('url 地址(必填)', '是否深度解析(选填, 默认为 false)')
const url = require("url");

const res = url.parse("http://localhost:8080/a/b/c/d.html?current=1&pagesize=12");
console.log(res)

    Url {
        // 协议
        protocol: 'http:',
        slashes: true,
        auth: null,
        // 域(域名+端口号)
        host: 'localhost:8080',
        // 端口号
        port: '8080',
        // 域名
        hostname: 'localhost',
        // hash值
        hash: null,
        // 携带的参数
        search: '?current=1&pagesize=12',
        // 查询字符串
        query: 'current=1&pagesize=12',
        // 完整路径名
        pathname: '/a/b/c/d.html',
        // 路径(带参数)
        path: '/a/b/c/d.html?current=1&pagesize=12',
        // 完整 url 路径
        href: 'http://localhost:8080/a/b/c/d.html?current=1&pagesize=12'
    }
  • 带参数时 
const url = require("url");

const res = url.parse("http://localhost:8080/a/b/c/d.html?current=1&pagesize=12", true);
console.log(res);
/*
    Url {
        ...
        query: [Object: null prototype] { current: '1', pagesize: '12' },
        ...
    }
*/

五、node内置模块http

  • node给我们提供的开启一个服务器的
  • 服务器: 一个提供服务的机器     服务: 数据或者文件    机器: 就是一台电脑
const http = require("http");

console.log(http);

// 0. 导入内置模块
const http = require("http");

// 1. 创建一个 服务器
const server = http.createServer(function (req, res) {
    /**
     *  req: 表明前端的请求报文
     *  res: 后端返回给前端的响应报文
    */

    console.log(req.url)
    // console.log('每当有一个前端访问的时候, 我就会被触发一次')

    if (req.url == '/a') {
        res.end('hello~~~pageA')
    }

    if (req.url == '/b') {
        res.end('hello~~~pageB')
    }

})

// 2. 给服务器配置一个端口号(0~65535)
server.listen(8080, () => {
    console.log('服务器开启成功, 端口号 8080')
})

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot+MyBatis和MyBatisPlus+vue+ElementUl实现批量删除 我只能说太简单了

目录准备工作MySQL数据库表Result返回结果1、SpringBootMyBatisPlusvueElementUl实现批量删除1.1、演示GIF动态图1.2、实体类1.3、Dao接口1.4、Service接口1.5、ServiceImpl接口实现层1.6、Controller控制层1.7、Vue前端2、SpringBootMyBatisvueElementUl实现批量删除2.1、演示…

关于数据权限的设计

在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。 控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC,但是控制用户只能访问某部分资源(即我们常说的数据权限)使用R…

云计算-JavaAPI与Hadoop的互联的实现

云计算-JavaAPI与Hadoop的互联的实现 文章目录云计算-JavaAPI与Hadoop的互联的实现一、环境准备二、HDFS 基本的命令操作三、HDFS客户端操作IntelliJ IDEA 环境准备通过API操作HDFS主函数程序进行连接测试1. 初始化hdfs连接获得FileSystem对象1. HDFS获取文件系统2. HDFS创建文…

Redis集群方案备忘录

文章目录哨兵模式官方Redis ClusterJedis(客户端分片)Codis(代理分片)哨兵模式 优点 哨兵模式是基于主从模式的,解决可主从模式中master故障不可以自动切换故障的问题。缺点 (1)是一种中心化的…

Express 6 指南 - 路由 6.3 路线路径 Route paths

Express Express 中文网 本文仅用于学习记录,不存在任何商业用途,如侵删 文章目录Express6 指南 - 路由6.3 路线路径 Route paths6 指南 - 路由 6.3 路线路径 Route paths 【这翻译得…生怕国人看懂】 路由路径与请求方法相结合,定义了可以…

大数据培训课程之序列化案例实操

序列化案例实操 1. 需求 统计每一个手机号耗费的总上行流量、下行流量、总流量 (1)输入数据 (2)输入数据格式: 7 13560436666 120.196.100.99 1116 954 200 id…

编辑器实现思路

复杂项目 业务的复杂性: 交互的复杂性数据结构和状态的复杂性,例如级联选择器需要遍历树结构,还有一些需要链表、栈、队列等多项目依赖,工程的复杂性性能优化流程的复杂性 git flowlint 工具单元测试commit信息Code ReviewCI/CD开发一个编辑器 例如低代码的编辑器 编辑器…

如何批量旋转图片?学会这三种方法就能轻松实现

对于喜爱拍照的小伙伴来说,你们的手机或者相机应该有很多图片素材吧。那么在整理这些图片到电脑的时候,你们的图片会不会出现方向不一致的情况呢?有的是倒着的,有的是左旋了90。想要将这些图片都调整为同一个方向,靠手…

Delete `␍` 最简单最有效的解决方法和解释(VScode)

一、原因 VScode 出现 Delete ␍ 的原因,大部分都是因为安装了 Prettier 插件指定了文件的结尾换行符与系统不一致导致的,就是下面这个插件 由于历史原因,windows 和 linux 两个系统的文本文件的换行符不一致;Windows在换行的时候…

空域图像增强-图像灰度变换

1.图像灰度变换。自选一张图片,完成以下图像处理:①显示图像的灰度直方图;②直方图均衡化,对比变化前后的图像和灰度直方图;③对图像进行线性灰度变换,对某部分灰度值进行扩展,压缩其它灰度值区…

汽车空调器前缸盖数控加工工艺的制订及夹具设计

目  录 摘  要 1 Abstract 2 1 引言 3 2 零件的分析 4 2.1 零件的作用 4 2.1.1空调压缩机的功用和要求 4 2.1.2 汽车空调压缩机的一般结构 4 2.1.3 斜盘式压缩机的结构特点 4 2.1.4 斜盘式压缩机的优点 5 2.2 零件的工艺分析 5 3 数控机床的加工性能分析 10 3.1…

[附源码]计算机毕业设计JAVA校园跑腿系统

[附源码]计算机毕业设计JAVA校园跑腿系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

2023年软考备考,系统分析师知识点速记,速看

2023上半年软考系统分析师知识点速记分享给大家,快来一起打卡学习吧! 1、企业集成分类:按组织范围分 2、企业集成分类:按集成点分 3、企业战略与信息化战略集成方法 业务与IT整合(BITA):重心是…

计算机组成原理习题课第三章-4(唐朔飞)

计算机组成原理习题课第三章-4(唐朔飞) ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:&…

计算机网络——OSI参考模型

计算机网络的分层结构 OSI参考模型 世界上第一个提出网络结构的公司IBM公司,其他的公司有美国国防部提出的TCP/IP 为了支持不同的网络结构的互联互通,国际标准化组织于1984年提出的开放的系统互联(OSI)参考模型。 OSI参考模型在…

光栅莫尔信号四倍频细分电路模块的设计与仿真研究

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

Kafka是什么?

简介: Kafka 是⼀种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn公司开发,使⽤Scala语⾔编写,⽬前是 Apache 的开源项⽬。broker:Kafka 服务器,负责消息存储和转发topic:消息类别…

地理知识:墨卡托坐标系

1 介绍 等角圆柱形地图投影法 假设地球被围在一个中空的圆柱里,其赤道与圆柱相接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅标准纬线为零度(即赤道&#xff…

论文阅读-----使用可分离脚印的x射线3D CT向前和向后投影

Long Y , Fessler J A , Balter J M . 3D Forward and Back-Projection for X-Ray CT Using Separable Footprints[J]. IEEE Transactions on Medical Imaging, 2010, 29(11):1839-1850. 摘要 在x射线计算机断层扫描(CT)中,迭代重建三维图像的方法比传统的滤波反投影…

汇编语言——王爽版 总结

汇编语言-王爽summary《考试复习版》 摆烂一学期,期末抱佛脚 只针对必要内容总结,并非按目录总结 文章目录汇编语言-王爽summary《考试复习版》只针对必要内容总结,并非按目录总结前言一、基础知识汇编语言的组成存储器指令和数据存储单元CPU…