本篇文章带大家聊聊node.js中的模块系统,内容包括events模块、util 模块、fs 模块、os 模块、path 模块等,希望对大家有所帮助!

参考资料:Node.js模块系统
为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。 换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。
Node.js 中存在 4 类模块(原生模块和3种文件模块)
例:var http = require("http");
Node.js 中自带了一个叫做 http 的模块,我们在我们的代码中请求它并把返回值赋给一个本地变量。
这把我们的本地变量变成了一个拥有所有 http 模块所提供的公共方法的对象。【相关教程推荐:nodejs视频教程】
加载模块:
exports 对象是模块公开的接口require 对象用于从外部获取一个模块的接口,即所获取模块的 exports 对象。//例子
//hello.js
exports.world = function() { //相当于给function()函数取了个别名world()
console.log('Hello World');
}
//main.js
var hello = require('./hello');
hello.world(); //访问 hello.js 的 world 函数
//结果
PS E:\learn> node main.js
Hello Worldmodule.exports = function() {...}exports 和 module.exports 的使用
如果要对外暴露属性或方法,就用 exports 就行,要暴露对象(类似class,包含了很多属性和方法),就用 module.exports。
//hello.js
function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello;
//main.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.sayHello();
//结果
PS E:\learn> node main.js
Hello BYVoid参考资料:Node.js EventEmitter
events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。
events 为一个模块,用 require("events"); 访问该模块。EventEmitter 相当于events模块里面的唯一的一个类,该类下有多个属性addListener(event, listener) 为指定事件添加一个监听器到监听器数组的尾部。on(event, listener) on函数为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。once(event, listener) 为指定事件注册一个单次监听器,即 监听器最多只会触发一次,触发后立刻解除该监听器removeListener(event, listener)移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。它接受两个参数,第一个是事件名称,第二个是回调函数名称removeAllListeners([event]) 移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器。setMaxListeners(n) 默认情况下, EventEmitters 如果你添加的监听器超过 10 个就会输出警告信息。 setMaxListeners 函数用于改变监听器的默认限制的数量。listeners(event) 返回指定事件的监听器数组。emit(event, [arg1], [arg2], [...]) 按监听器的顺序执行执行每个监听器,如果事件有注册监听返回 true,否则返回 false。listenerCount(emitter, event) 返回指定事件的监听器数量。//例子
//event.js 文件
var events = require('events'); // 引入 events 模块
var emitter = new events.EventEmitter(); // 创建 eventEmitter 对象
//为事件someEvent注册两个监视器
emitter.on('someEvent', function(arg1, arg2) {
console.log('listener1', arg1, arg2);
});
emitter.on('someEvent', function(arg1, arg2) {
console.log('listener2', arg1, arg2);
});
//按顺序执行someEvent的每个监视器
emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); // 'arg1 参数', 'arg2 参数'为参数arg1,arg2的值//结果 $ node event.js listener1 arg1 参数 arg2 参数 listener2 arg1 参数 arg2 参数
util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心 JavaScript 的功能 过于精简的不足。
util.callbackify(original)
将 async 异步函数(或者一个返回值为 Promise 的函数)转换成遵循异常优先的回调风格的函数
//例子
const util = require('util');
async function fn() {
return 'hello world';
}
const callbackFunction = util.callbackify(fn);
callbackFunction((err, ret) => {
if (err) throw err;
console.log(ret);
});
//结果
hello worldutil.inherits(constructor, superConstructor) 是一个实现对象间原型继承的函数。
//例子
var util = require('util');
//Base构造函数内三个属性
function Base() {
this.name = 'base';
this.base = 1991;
this.sayHello = function() {
console.log('Hello ' + this.name);
};
}
//原型中定义的一个函数
Base.prototype.showName = function() {
console.log(this.name);
};
//Sub构造函数内一个属性
function Sub() {
this.name = 'sub';
}
util.inherits(Sub, Base); //Sub从Base继承
var objBase = new Base();
objBase.showName();
objBase.sayHello();
console.log(objBase);
var objSub = new Sub();
objSub.showName();
//objSub.sayHello();
console.log(objSub);
//结果
base
Hello base
{ name: 'base', base: 1991, sayHello: [Function] }
sub
{ name: 'sub' }
//Base 有 name , base , sayHello() , showName()
//Sub 有 name(自己定义的,不是继承的) , showName() 从Base继承的util.inspect(object,[showHidden],[depth],[colors]) 是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。var util = require('util');
function Person() {
this.name = 'byvoid';
this.toString = function() {
return this.name;
};
}
var obj = new Person();
console.log(obj);
console.log(util.inspect(obj));
console.log(util.inspect(obj, true));
参考资料:Node.js 文件系统
Node.js 文件系统模块 官网fs.open(path, flags[, mode], callback) 在异步模式下打开文件
参数:
callback(err, fd)
r 以读取模式打开文件。如果文件不存在抛出异常。r+ 以读写模式打开文件。如果文件不存在抛出异常。rs 以同步的方式读取文件。rs+ 以同步的方式读取和写入文件。w 以写入模式打开文件,如果文件不存在则创建。wx 类似 ‘w’,但是如果文件路径存在,则文件写入失败。w+ 以读写模式打开文件,如果文件不存在则创建。wx+ 类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。a 以追加模式打开文件,如果文件不存在则创建。ax 类似 ‘a’, 但是如果文件路径存在,则文件追加失败。a+ 以读取追加模式打开文件,如果文件不存在则创建。ax+ 类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。
fs.stat(path, callback) 通过异步模式获取文件信息
callback(err, stats), stats 是 fs.Stats 对象。fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过stats类中的提供方法判断文件的相关属性
stats.isFile() 如果是文件返回 true,否则返回 false。stats.isDirectory() 如果是目录返回 true,否则返回 false。stats.isBlockDevice() 如果是块设备返回 true,否则返回 false。stats.isCharacterDevice() 如果是字符设备返回 true,否则返回 false。stats.isSymbolicLink() 如果是软链接返回 true,否则返回 false。stats.isFIFO() 如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。stats.isSocket() 如果是 Socket 返回 true,否则返回 false。
fs.writeFile(file, data[, options], callback) 异步模式下写入文件
writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。
fs.read(fd, buffer, offset, length, position, callback) 异步模式下读取文件,该方法使用了文件描述符来读取文件。
fs.close(fd, callback) 异步模式下关闭文件,该方法使用了文件描述符来读取文件。
fs.ftruncate(fd, len, callback) 异步模式下截取文件,该方法使用了文件描述符来读取文件。
fs.unlink(path, callback) 删除文件的语法格式:
fs.mkdir(path[, options], callback) 创建目录
fs.readdir(path, callback) 读取目录
fs.rmdir(path, callback) 删除目录
参考资料:Node.js OS 模块
属性:os.EOL 定义了操作系统的行尾符的常量。
方法:os.tmpdir() 返回操作系统的默认临时文件夹os.endianness() 返回 CPU 的字节序,可能的是 “BE” 或 “LE”。os.hostname() 返回操作系统的主机名。os.type() 返回操作系统名os.platform() 返回编译时的操作系统名os.arch() 返回操作系统 CPU 架构,可能的值有 “x64”、“arm” 和 “ia32”。os.release() 返回操作系统的发行版本。os.uptime() 返回操作系统运行的时间,以秒为单位。os.loadavg() 返回一个包含 1、5、15 分钟平均负载的数组。os.totalmem() 返回系统内存总量,单位为字节。os.freemem() 返回操作系统空闲内存量,单位是字节。os.cpus() 返回一个对象数组,包含所安装的每个 CPU/内核的信息:型号、速度(单位 MHz)、时间(一个包含 user、nice、sys、idle 和 irq 所使用 CPU/内核毫秒数的对象)。os.networkInterfaces() 获得网络接口列表。
参考资料:Node,js Web模块
更多node相关知识,请访问:nodejs 教程!
以上就是Node学习之聊聊模块系统的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号