Javascript Express-通过点表示法访问顶级Express函数

Javascript Express-通过点表示法访问顶级Express函数,javascript,node.js,express,Javascript,Node.js,Express,在一个简单的javascript文件中,我们可以通过在开头添加这两行代码(通过npm安装后)来使用express: 现在,根据express API指南: app对象通常表示Express应用程序。通过调用express模块导出的顶级express()函数来创建它 既然app对象正在调用顶级express()函数,为什么我不能简单地使用: var app = foo.express(); 第一行将模块“express”导出的内容分配给名为express的变量。不同的模块将导出不同的内容(对象、

在一个简单的javascript文件中,我们可以通过在开头添加这两行代码(通过npm安装后)来使用express:

现在,根据express API指南:

app对象通常表示Express应用程序。通过调用express模块导出的顶级express()函数来创建它


既然app对象正在调用顶级express()函数,为什么我不能简单地使用:

var app = foo.express();

第一行将模块“express”导出的内容分配给名为
express
的变量。不同的模块将导出不同的内容(对象、函数)。Express导出一个函数

该行:

var app = express()

执行函数。此函数用于生成express应用程序对象。此对象具有您在标准express应用程序中处理请求所使用的所有方法。

传递的require函数“express”返回module.exports,其中包含顶级函数express(),类似于:

module.exports = express(){...}
这就是为什么我们仍然需要通过以下方式调用它:

var foo = require('express');
var app = foo();

您不能使用:

var foo = require('express');
var app = foo.express();
因为它不是这样设置的,所以如果express模块看起来像这样,您可以使用它:

module.exports.express = express(){...}

我不知道为什么你会选择其中一种而不是另一种,我只知道第二种技术只是直接公开了你的函数。

“app object正在调用顶级express”这是不正确的。您正在调用express导出的模块,并将结果分配给
app
。这与CommonJS模块系统有关,并且不是特定于Express的。@E_net4如果var app正在调用由Express导出的模块,那么var Express做什么?
Express
是一个函数,您可以调用它来实例化应用程序对象。请更新您的问题。你知道
require
是如何工作的吗?@E_net4我相信我理解。它只是检索被调用的模块并将其放入缓存中。我的问题与语法有关。为什么我们不能通过点符号直接调用express函数呢。
var foo = require('express');
var app = foo.express();
module.exports.express = express(){...}