如何覆盖 Node.js 中模块的功能?
覆盖意味着不改变任何对象或模块的原始定义,而是改变其在当前场景中的行为(它已被导入或继承)。为了实现覆盖,我们将覆盖nodeJS的内置模块 ' url ' 的函数。让我们看一下覆盖模块所涉及的步骤:
- 首先,需要我们要覆盖的模块。
const url = require('url')
- 然后删除我们要覆盖的模块的函数。在这里,我们将覆盖'url ' 模块的format()函数
delete url['format']
- 现在添加具有相同名称的函数“格式”,为模块的format()函数提供新定义
url.format = function(params...) {
// statement(s)
}
- 现在重新导出“ url ”模块以使更改生效
module.exports = url
让我们一步一步来实现完整的工作代码:
第 1 步:创建一个“ app.js ”文件并使用npm初始化您的项目。
npm init
项目结构如下所示:
第 2 步:现在让我们编写“ app.js ”文件。在其中,我们按照上面提到的所有步骤来覆盖模块。在这些步骤之后,您将成功覆盖“ url”模块的format()函数。在下面找到完整的工作代码,其中显示了format()函数在覆盖之前和之后的行为。
app.js
// Requiring the in-built url module
// to override
const url = require("url");
// The default behaviour of format()
// function of url
console.log(url.format("http://localhost:3000/"));
// Deleting the format function of url
delete url["format"];
// Adding new function to url with same
// name so that it would override
url.format = function (str) {
return "Sorry!! I don't know how to format the url";
};
// Re-exporting the module for changes
// to take effect
module.exports = url;
// The new behaviour of export() function
// of url module
console.log(url.format("http://localhost:3000/"));
第 3 步:使用以下命令运行您的节点应用程序。
node app.js
输出: