我一直在阅读文档,但仍然不太明白为什么我们将express()存储在应用程序变量中。
我知道我们不能只使用express()。get和.post来调用方法,因为我尝试过并失败了,但是为什么呢?
怎么会不像我们从模块中调用函数那样呢?导出我们需要的任何文件?
我真的很困惑,哈哈。
答案 0 :(得分:3)
express
希望您为其创建一个 instance 对象并使用它。一种简短的回答是说“因为这是快递制造商对他们的用户的期望”。
在您的脚本中,开发人员的期望是您的.get
和.post
方法是针对常用的express实例调用的。这样,我们可以说对express()
的调用将初始化实例并返回一个对象,该对象将存储在app
中。
根据您的评论进行编辑:
express是一个基于类创建新对象的函数
express()
初始化了应用程序对象,但我还没有遇到需要具体了解操作方法的情况。我不知道这是一个函数还是一个类。这就是“封装”,即OOP中的概念,其中您,使用模块的用户需要知道的内容以及使用模块的开发人员需要知道的内容之间都有明确的界限。 / p>
...取决于所使用的方法(例如:.get),然后使用该实例使我们进行路由以返回诸如回调中的req和res参数之类的东西?
初始化的对象实现方法,回调等(如您所描述的.get
。)
所有这些都在express模块中吗?
所有这些都是使用Express API的常规模式。
答案 1 :(得分:1)
当您的代码调用var express = require('express')
时,实际上会导入名为createApplication
的 Factory方法(源代码here)。
同时,当您执行express().get
和express().post
时,您期望它会返回Express应用程序对象的相同实例,而不会。如果express在后台使用 Singleton 模式,则您的代码将起作用(导致每次调用express()
时都返回同一实例)。虽然 Factory方法设计模式将始终创建一个新实例。
也就是说,您直接使用express().get
或express().post
添加的每条路由将始终分布在许多不同的应用程序实例中。因此,基本上,它将按广告宣传工作,但不会达到您的预期。