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


    一、nodejs的模块化

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

    (一)node模块的分类

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

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

    3. 第三方模块

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

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

    (二)导出语法

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

    1. Module {
    2. id: '.',
    3. // 当前文件所在目录
    4. path: 'E:\\yizhiyang\\JavaScript2\\date1129:认识node\\code',
    5. // 记录了, 当前文件 导出的内容
    6. exports: {},
    7. // 当前文件完整的文件名
    8. filename: 'E:\\yizhiyang\\JavaScript2\\date1129:认识node\\code\\04_nodejs的模块化.js',
    9. // 是否被引入
    10. loaded: false,
    11. // 表明当前文件导入了什么模块
    12. children: [],
    13. paths: [
    14. 'E:\\yizhiyang\\JavaScript2\\date1129:认识node\\code\\node_modules',
    15. 'E:\\yizhiyang\\JavaScript2\\date1129:认识node\\node_modules',
    16. 'E:\\yizhiyang\\JavaScript2\\node_modules',
    17. 'E:\\yizhiyang\\node_modules',
    18. 'E:\\node_modules'
    19. ]
    20. }

    1、导出语法1

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

    1. //在默认对象内添加属性, 导出的还是一个对象
    2. module.exports.num = 100
    3. module.exports.str = 'QF666'
    4. console.log(module)
    5. /*
    6. Module {
    7. ...
    8. exports: { num: 100, str: 'QF666' },
    9. ...
    10. }
    11. */

    2、导出语法2

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

    3、导出语法3

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

    (二)导入语法

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

    out.js

    1. module.exports.num = 100
    2. module.exports.str = 'QF666'
    3. module.exports.str2 = 'QF001'

    in.js

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

    二、node内置模块fs

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

    1、异步读取文件

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

            文件路径: 必填

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

            回调函数: 必填

    1. const fs = require('fs');
    2. fs.readFile('./index.txt', 'utf-8', function (err, data) {
    3. /**
    4. * err: 如果读取失败, 会给一个err
    5. * data: 读取成功,文件的内容
    6. */
    7. console.log(err); //null
    8. console.log(data);
    9. })

     报错信息:

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

     2、同步读取文件

    1. const fs = require('fs');
    2. console.log('start');
    3. let data = fs.readFileSync('./index.txt', 'utf-8')
    4. console.log('data');
    5. console.log('end');

     3、异步写入

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

    三、node内置模块path

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

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

    • path.join([路径片段1, 路径片段2, 路径片段3])
    1. const path = require("path");
    2. const res1 = path.join("a", "/b", "/c", "/d.html");
    3. console.log(res1); // a\b\c\d.html
    4. const res2 = path.resolve("a", "/b", "/c", "/d.html");
    5. console.log(res2); // C:\d.html
    6. const res3 = path.resolve("q/w/e", "y.html");
    7. console.log(res3);
    8. // C:\Users\41099\Desktop\GY-2203\07周\02天\code\06_node内置模块path\q\w\e\y.html
    9. const res4 = path.parse(
    10. 'C:/Users/41099/Desktop/GY-2203/07周/02天/code/06_node内置模块path/q/w/e/y.html'
    11. )
    12. console.log(res4)

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

     四、node内置模块url

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

    •  url.parse('url 地址(必填)', '是否深度解析(选填, 默认为 false)')
    1. const url = require("url");
    2. const res = url.parse("http://localhost:8080/a/b/c/d.html?current=1&pagesize=12");
    3. console.log(res)

    1. Url {
    2. // 协议
    3. protocol: 'http:',
    4. slashes: true,
    5. auth: null,
    6. // 域(域名+端口号)
    7. host: 'localhost:8080',
    8. // 端口号
    9. port: '8080',
    10. // 域名
    11. hostname: 'localhost',
    12. // hash值
    13. hash: null,
    14. // 携带的参数
    15. search: '?current=1&pagesize=12',
    16. // 查询字符串
    17. query: 'current=1&pagesize=12',
    18. // 完整路径名
    19. pathname: '/a/b/c/d.html',
    20. // 路径(带参数)
    21. path: '/a/b/c/d.html?current=1&pagesize=12',
    22. // 完整 url 路径
    23. href: 'http://localhost:8080/a/b/c/d.html?current=1&pagesize=12'
    24. }
    • 带参数时 
    1. const url = require("url");
    2. const res = url.parse("http://localhost:8080/a/b/c/d.html?current=1&pagesize=12", true);
    3. console.log(res);
    4. /*
    5. Url {
    6. ...
    7. query: [Object: null prototype] { current: '1', pagesize: '12' },
    8. ...
    9. }
    10. */

    五、node内置模块http

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

    1. // 0. 导入内置模块
    2. const http = require("http");
    3. // 1. 创建一个 服务器
    4. const server = http.createServer(function (req, res) {
    5. /**
    6. * req: 表明前端的请求报文
    7. * res: 后端返回给前端的响应报文
    8. */
    9. console.log(req.url)
    10. // console.log('每当有一个前端访问的时候, 我就会被触发一次')
    11. if (req.url == '/a') {
    12. res.end('hello~~~pageA')
    13. }
    14. if (req.url == '/b') {
    15. res.end('hello~~~pageB')
    16. }
    17. })
    18. // 2. 给服务器配置一个端口号(0~65535)
    19. server.listen(8080, () => {
    20. console.log('服务器开启成功, 端口号 8080')
    21. })

  • 相关阅读:
    ElementUI浅尝辄止33:Form 表单
    竟然可以在一个项目中混用 Vue 和 React?
    Python - 生成二维码、条形码
    IO接口基础知识
    前端之使用webpack打包TS
    EtherCAT从站EEPROM分类附加信息详解:FMMU(现场总线内存管理单元)
    Python使用psycopg2读取PostgreSQL的geometry字段出现二进制乱码
    vue3的watch、computed写法及扩展( 对比vue2)
    考研思想政治理论大纲
    二维数组的最小路径和问题
  • 原文地址:https://blog.csdn.net/m0_58190023/article/details/128104598