模式切换
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
被重新赋值了。