📜  如何覆盖 Node.js 中模块的功能?

📅  最后修改于: 2022-05-13 01:56:34.564000             🧑  作者: Mango

如何覆盖 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

输出:

在控制台输出