模式切换
Node.js 基础
Node.js 基础
Node.js 全局对象
在 Node.js 中,有一些全局对象、全局变量和全局函数,在任何模块中都可以直接访问,而不需要进行任何引用或导入。它们是 Node.js 的核心部分。
全局变量
__dirname: 返回当前模块文件所在的目录的绝对路径。javascriptconsole.log(__dirname);输出的是当前脚本文件所在的目录路径。
__filename: 返回当前模块的文件名,包括完整的路径。javascriptconsole.log(__filename);输出的是当前脚本文件的完整路径。
process: 这是一个全局变量,提供关于当前 Node.js 进程的信息,并且允许开发者与该进程进行交互。process.argv: 包含了启动 Node.js 进程时传入的命令行参数。process.env: 返回一个包含环境变量的对象。process.exit(): 终止当前进程。
global:global是 Node.js 的全局对象,类似于浏览器环境中的window。通过global,你可以访问到 Node.js 环境的全局变量。javascriptglobal.myVariable = "Hello, world!"; console.log(myVariable); // 输出 "Hello, world!"
全局对象
Node.js 提供了多个全局对象,用于处理与系统、文件、网络等相关的操作。常见的全局对象包括:
global:表示全局作用域对象,所有 Node.js 模块都可以访问该对象。Buffer:用于处理二进制数据。javascriptconst buf = Buffer.from('Hello, Node.js'); console.log(buf);setTimeout()和setInterval():用来在特定的时间延迟后执行函数或定时重复执行。javascriptsetTimeout(() => { console.log('This runs once after 1 second'); }, 1000); setInterval(() => { console.log('This runs every 2 seconds'); }, 2000);
全局函数
Node.js 提供了几个常用的全局函数,用于处理常见的任务:
setImmediate():用于在当前事件循环结束时执行指定的回调函数。javascriptsetImmediate(() => { console.log('This runs after the event loop'); });clearImmediate():取消通过setImmediate()设置的操作。require():用于导入外部模块。它是 Node.js 中的内置函数。javascriptconst fs = require('fs'); fs.readFileSync('path/to/file');console.log():打印输出内容。Node.js 同样支持浏览器中的console.log。process.nextTick():将回调函数推迟到当前操作完成后,优先于任何异步事件执行。
模块化编程
Node.js 采用了 CommonJS 模块化规范,每个 JavaScript 文件都被视为一个独立的模块,并且具有自己的作用域。模块化编程使得代码更加结构化和可维护。
exports 对象
每个 Node.js 模块都会自动创建一个 exports 对象,该对象用于将模块中的功能暴露给外部。你可以将函数、对象或变量挂载到 exports 上,以便其他文件可以通过 require() 引入并使用。
使用
exports导出功能:javascript// math.js 模块 exports.add = function(a, b) { return a + b; }; exports.subtract = function(a, b) { return a - b; };在另一个模块中引入并使用:
javascript// app.js const math = require('./math'); console.log(math.add(2, 3)); // 输出 5 console.log(math.subtract(5, 3)); // 输出 2
注意,exports 和 module.exports 实际上是指向同一个对象。如果你直接赋值给 module.exports,那么你就必须完全重写导出的对象。
module 对象
每个模块都会有一个 module 对象,module.exports 是用来指定该模块导出的实际内容。通常情况下,exports 是 module.exports 的引用,但你可以直接使用 module.exports 来替换 exports,这时就会导致原本通过 exports 暴露的内容被覆盖。
通过
module.exports导出内容:javascript// math.js module.exports = function(a, b) { return a + b; };在另一个模块中使用:
javascript// app.js const add = require('./math'); console.log(add(2, 3)); // 输出 5混合使用
exports和module.exports:如果你同时修改了
exports和module.exports,通常推荐不要这样做,因为这样会导致不确定性,可能会让你的模块行为不符合预期。例如:javascript// 不推荐的做法 exports.add = function(a, b) { return a + b; }; module.exports = function(a, b) { return a * b; };上面的代码会导致导出的结果是
module.exports中的函数,而exports.add被丢弃,因为module.exports被重新赋值了。
