简介
在我上一篇关于Node.js--依赖管理的文章中,我们了解了什么是Node.js模块的基本知识。我们如何使用module.exports和require来处理依赖关系。文件夹依赖是如何工作的,为什么它们是有用的。我们都看了Node.js查找系统是如何工作的,以寻找依赖关系和NPM的一些基础知识。
今天我们将继续从这一点出发,看看我们如何使用这个模块系统,将一个应用程序分解成多个模块。这样做有什么好处,Node.js是如何处理的?
我将使用前一篇文章中的一些知识,所以,如果你是第一次来这里,我将建议你查看前一篇文章,使这部分内容容易理解。
但在我们继续讨论多模块的应用设置之前,让我们再学习一下Node.js模块的其他一些有趣的方面。
Node模块是单子吗?
在上一篇文章中,我们谈到Node只加载一次模块,如果有人问起它,Node会给出该模块的缓存副本。所以,是的,它们的行为就像单子。让我们来看看这种行为的例子。
首先,我为应用程序创建了一个项目,初始化应用程序,并创建了一个文件user.js,如下所示。
现在,在app.js中,我需要用户模块,并按如下方式使用它。
你可以看到,我们创建了两个user变量,然而,对一个变量的修改会反映到另一个变量上。用户模块被缓存起来,并在另一次要求时被重新使用。这是你必须注意的事情。
让我们看看如果我们把它改成一个构造函数会有什么表现**。**
构造函数
我已经改变了user.js的实现(我们在上一篇文章中了解了构造函数)。
现在我在app.js中使用它,如下所示。
所以,这一次,我们得到了两个不同的实例,现在你可以看到其中的差别。不要太担心,我们会在后面的文章中看到更多的例子和解决方案。
现在,让我们转向我们的主要话题,关于使用模块管理应用程序。
应用程序结构
我们将开始为我们的应用程序结构建立一个基础,我们将从简单的开始,随着我们的前进而完善它。
我已经创建了几个新的文件夹,并移动了文件,现在我们的应用程序有如下结构。

我做的第一件事是为不同的模块创建单独的文件夹。你可以看到,有一个图书管理文件夹,另一个文件夹用于记录器,以及类似的用户管理。这样,每个模块都很集中,易于定位和管理。
每个文件夹都可以有子文件夹,以此类推。另外,注意文件夹级别的index.js文件,这将作为模块的API。
然后,在app.js中,我们可以通过要求模块来引用模块,你可以看到它是按预期工作的。注意,我们可以通过要求来引用user.js。
现在,让我们更新我们的代码。

我在book-management模块(文件夹)下创建了几个项目。这里你可以看到book.js遵循一个非常常见的JavaScript构造函数模式(它与我们在上面看到的user.js的构造函数例子有一点不同)
然后,我们在相应的index.js文件里有以下代码。
所以,现在我们有了index.js作为模块的一个API。让我们在app.js中使用它,如下。

我们可以看到,我们的应用程序正在按预期工作。我继续修改了user.js,使其遵循book.js的构造模式,你也可以作为一个练习来尝试。
我想说的一点是,你可以在Node.js中使用你现有的JavaScript知识或其他语言的设计模式技能。我们之前看到的构造器模式就是其中一个例子。由于这些模式有不同的实现方式,所以根据你的要求和/或你的喜好,你可以按照你认为合适的方式使用这些。
这里,是我们重构user.js部分后的代码外观。

总结
我们的应用程序是非常基本的,在这篇文章中,我们开始通过学习Node.js依赖性管理的一些基础知识和一些设置项目结构的常用方法来建立基础。
我们还看到,我们可以在我们的Node应用程序中使用我们现有的JavaScript设计模式知识。我们也看到了一些简单的例子。
我的想法是把这个学习扩展到更接近真实世界的项目,并逐步增加更多的特性和功能。在未来的日子里,我将尝试写更多关于这个主题的文章。如果你有一些意见或问题,请告诉我。你可以从这个Git Repo获得代码。下次再见,祝你编码愉快
主题。
nodejs, node应用, javascript, nodejs开发