什么是Node.js 全局对象
对于浏览器引擎来说,JavaScript 脚本中的 window 是全局对象,而Node.js程序中的全局对象是 global,所有全局变量(除global本身外)都是global 对象的属性。全局变量和全局对象是所有模块都可以调用的。Node.is 的全局变量包括filename和 dirname 等,全局对象包括console 和process 等。
全局变量 __filename和 __dirname
__flename
(两个下画线开头)指向当前正在执行的脚本文件名。__dimname
指向当前运行的脚本所在的目录。与path.dirname( __filename)
返回的路径相同
console.log("======输出开始==========")
console.log(__filename);
console.log(__dirname);
console.log("======输出结束==========")
上面演示 console.log(__filename);
输出了脚本文件的绝对路径。console.log(__dirname);
则输出了脚本文件所在文件夹的绝对路径。
假定有两个模块a和b,其中b是a的依赖文件,a和b的目录结构如下
/users/zxp/app/a.js
/users/zxp/app/node_modules/b/b.js
b.is中的 __filename
会指向/users/zxp/app/node modules/b/b.js,
而a.js 中的 __filename
会指向/users/zxp/app/a.js。
也就是说模块依赖不会改变路径。
console 模块
console 模块类似于Web浏览器提供的JavaSctipt 控制台。该模块导出两个特定的组件:全局console 实例和 Console 类目。
1,全局console 实例
在Node.js中,全局的console对象提供了一些常用的方法来进行控制台输出。
这些方法可以帮助开发者在开发过程中进行调试和输出信息,方便定位问题和查看程序运行状态。
以下是console对象的一些常用方法:
-
console.log(message[, …args]):以普通文本形式输出消息到控制台。
示例代码:console.log("Hello, World!");
-
console.error(message[, …args]):以错误文本形式输出消息到控制台。
示例代码:console.error("Error occurred!");
-
console.warn(message[, …args]):以警告文本形式输出消息到控制台。
示例代码:console.warn("Warning: This action is not recommended!");
-
console.info(message[, …args]):以信息文本形式输出消息到控制台。
示例代码:console.info("Information: The server is running.");
-
console.debug(message[, …args]):以调试文本形式输出消息到控制台。
示例代码:console.debug("Debugging information: ", variable);
-
console.dir(obj[, options]):以对象形式输出对象的详细信息到控制台。
示例代码:const obj = { name: "John", age: 30 }; console.dir(obj);
-
console.time(label) 和 console.timeEnd(label):用于计算代码执行时间的开始和结束点。
示例代码:console.time("myTimer"); // 执行一些耗时操作 console.timeEnd("myTimer");
-
console.trace(message[, …args]):输出当前调用栈的跟踪信息。
示例代码:console.trace("Trace this function call");
Console 类
Console类可用于创建具有可配置输出流的简单记录器。通过 require('console').Console
或者console.Console 进行访问。
Console类有以下方法,可以用于写入任何Nodejs流。
- console.log()
- console.errror()
- console.warn()
const fs = require('fs');
const out = fs.createWriteStream('out.log');
const err = fs.createWriteStream('err.log');
const myConsole = new console.Console(out, err);
myConsole.log('hello world'); // 打印hello world到out流
myConsole.log('hello %s', 'world'); //打印hello world到out流
myConsole.error(new Error('错误信息')); //打印 [Error: 错误信息] 到 err流
const name = 'Robert';
myConsole.warn(`Danger ${name}! Danger!`);