node的模块化和内置模块

一、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')
})

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js中,全局初始化通常指的是在项目的入口文件中进行一些初始化配置和设置。根据提供的引用内容,可以看出在项目的入口文件app.js中进行了express模块的导入和服务器实例的创建,并通过调用app.listen方法指定了端口号和启动了web服务器。 在全局初始化过程中,有时候我们还需要使用到Node.js中的其他模块和工具函数。其中,引用提到了使用EventEmitter来实现事件的监听和触发。通过继承EventEmitter,对象可以具备事件响应的能力,并且不会影响对象原有的继承关系。这样做符合语义,也符合JavaScript对象机制的特点。 此外,引用提到了util模块的使用。util模块Node.js内置模块之一,提供了一些实用的工具函数。比如,util.inherits方法可以实现对象之间的原型链继承关系。这在全局初始化过程中,可能会被使用到。 因此,Node.js的全局初始化过程包括导入所需的模块、创建服务器实例、进行一些配置和设置,以及可能涉及到继承EventEmitter和使用util模块的工具函数。123 #### 引用[.reference_title] - *1* *3* [Node中的全局对象和全局变量](https://blog.csdn.net/woshinannan741/article/details/51347974)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [Node.js学习篇(十)初始化项目](https://blog.csdn.net/hql1024/article/details/125728825)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值