我一直在阅读文档,但仍然不太明白为什么我们将express()存储在应用程序变量中。
我知道我们不能只使用express().get和.post调用方法,因为我试过了,但失败了,但为什么?
为什么它不像我们从所需文件的module.exports中调用函数那样工作?
我真的很困惑哈哈。
express
希望您创建它的实例对象并使用它。一个简短的回答是说"因为这是快递制造商对用户的期望。">
在整个脚本中,开发人员的期望是针对express的公共实例调用.get
和.post
方法。通过这种方式,我们可以说对express()
的调用初始化了实例并返回了一个对象,该对象存储在app
中。
编辑以回应您的评论:
express是一个基于类创建新对象的函数
express()
初始化应用程序对象,我还没有遇到需要具体了解如何初始化的情况。我不知道它是函数还是类。这就是"封装",OOP中的概念,在这个概念中,模块的用户为了使用它需要知道什么,模块的开发人员为了保持它的工作需要知道什么之间有一个明确的边界。
。。。取决于所使用的方法(例如:.get),然后使用该实例来允许我们生成一个路由,该路由返回回调中的req和res参数
初始化的对象实现方法、回调等(如您所描述的.get
)
所有这些都在express模块中
所有这些都是使用express API的传统模式。
当您的代码调用var express = require('express')
时,实际上会导入名为createApplication
的Factory方法(此处为源代码)。
同时,当您执行express().get
和express().post
时,您预计它将返回express应用程序对象的相同实例,而事实并非如此。如果express在后台使用Singleton模式(导致每次调用express()
时都返回相同的实例),那么您的代码就会工作。而Factory方法设计模式将始终创建一个新实例。
也就是说,您直接使用express().get
或express().post
添加的每个路由都将始终分布在许多不同的应用程序实例中。所以基本上,它会像广告中说的那样工作,但不会像你预期的那样