Skip to content

Node.js 基础

Node.js 基础

Node.js 全局对象

在 Node.js 中,有一些全局对象、全局变量和全局函数,在任何模块中都可以直接访问,而不需要进行任何引用或导入。它们是 Node.js 的核心部分。

全局变量

  • __dirname: 返回当前模块文件所在的目录的绝对路径。

    javascript
    console.log(__dirname);

    输出的是当前脚本文件所在的目录路径。

  • __filename: 返回当前模块的文件名,包括完整的路径。

    javascript
    console.log(__filename);

    输出的是当前脚本文件的完整路径。

  • process: 这是一个全局变量,提供关于当前 Node.js 进程的信息,并且允许开发者与该进程进行交互。

    • process.argv: 包含了启动 Node.js 进程时传入的命令行参数。
    • process.env: 返回一个包含环境变量的对象。
    • process.exit(): 终止当前进程。
  • global: global 是 Node.js 的全局对象,类似于浏览器环境中的 window。通过 global,你可以访问到 Node.js 环境的全局变量。

    javascript
    global.myVariable = "Hello, world!";
    console.log(myVariable);  // 输出 "Hello, world!"

全局对象

Node.js 提供了多个全局对象,用于处理与系统、文件、网络等相关的操作。常见的全局对象包括:

  • global:表示全局作用域对象,所有 Node.js 模块都可以访问该对象。
  • Buffer:用于处理二进制数据。
    javascript
    const buf = Buffer.from('Hello, Node.js');
    console.log(buf);
  • setTimeout()setInterval():用来在特定的时间延迟后执行函数或定时重复执行。
    javascript
    setTimeout(() => {
      console.log('This runs once after 1 second');
    }, 1000);
    
    setInterval(() => {
      console.log('This runs every 2 seconds');
    }, 2000);

全局函数

Node.js 提供了几个常用的全局函数,用于处理常见的任务:

  • setImmediate():用于在当前事件循环结束时执行指定的回调函数。

    javascript
    setImmediate(() => {
      console.log('This runs after the event loop');
    });
  • clearImmediate():取消通过 setImmediate() 设置的操作。

  • require():用于导入外部模块。它是 Node.js 中的内置函数。

    javascript
    const 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

注意,exportsmodule.exports 实际上是指向同一个对象。如果你直接赋值给 module.exports,那么你就必须完全重写导出的对象。

module 对象

每个模块都会有一个 module 对象,module.exports 是用来指定该模块导出的实际内容。通常情况下,exportsmodule.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
  • 混合使用 exportsmodule.exports

    如果你同时修改了 exportsmodule.exports,通常推荐不要这样做,因为这样会导致不确定性,可能会让你的模块行为不符合预期。例如:

    javascript
    // 不推荐的做法
    exports.add = function(a, b) {
      return a + b;
    };
    
    module.exports = function(a, b) {
      return a * b;
    };

    上面的代码会导致导出的结果是 module.exports 中的函数,而 exports.add 被丢弃,因为 module.exports 被重新赋值了。

编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!