【问题标题】:Express - Accessing top-level express function through dot-notationExpress - 通过点符号访问顶级 express 功能
【发布时间】:2017-04-16 09:05:14
【问题描述】:

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

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

现在,根据 express API 指南:

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

既然app对象调用的是顶级的express()函数,我怎么不能简单的使用:

var app = foo.express();

【问题讨论】:

  • "app 对象正在调用顶级 express" 不正确。您正在调用 express 导出的模块并将结果分配给app。这与 CommonJS 模块系统有关,并不特定于 Express。
  • @E_net4 如果var app调用的是express导出的模块,那么var express做什么?
  • express 是您调用以实例化应用程序对象的函数。
  • 请更新您的问题。你了解require 的工作原理吗?
  • @E_net4 我相信我明白了。它只是检索被调用的模块并将其放入缓存中。我的问题与语法有关。为什么我们不能通过点符号直接调用 express 函数。

标签: javascript node.js express


【解决方案1】:

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

行:

var app = express()

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

【讨论】:

    【解决方案2】:

    通过'express'的require函数返回module.exports,其中包含顶级函数express(),类似于:

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

    这就是为什么我们仍然需要通过以下方式调用它:

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

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

    你不能使用:

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

    因为它不是这样设置的,所以如果 express 模块看起来像这样,你可以使用它:

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

    我不知道你为什么会选择其中一个的原因,我只知道第二种技术只是直接暴露你的功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 2021-08-15
      • 1970-01-01
      • 2018-05-16
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多