代码之家  ›  专栏  ›  技术社区  ›  CodeMonkey

在Node.js程序中,我们实际从Express导入什么

  •  0
  • CodeMonkey  · 技术社区  · 7 年前

    通常,当我们在节点中导入某些内容时,我们会执行以下操作:

    const fs = require("fs");
    ... //use fs's methods for file system stuff
    

    然而,当我们使用express时,我们正在做:

    const express = require("express");
    const app = express();
    app.get( .... )
    

    进口货有什么区别?我们为什么打电话 express() 就像一个函数(我假设它导入了一些函数,如果导入了,函数会做什么)?若我前面的问题无法解释,为什么我们不调用 express 我们导入的对象?

    2 回复  |  直到 7 年前
        1
  •  1
  •   zero298    7 年前

    你说,你的问题做出了错误的假设

    express 对象

    但是 require("express") 返回一个 Function .

    这是出口的不同之处。一个导出附加属性的对象,而另一个导出函数。

    快递公司负责后者。看见 express source :

    exports = module.exports = createApplication;
    
    function createApplication() {...};
    

    node fs source :

    module.exports = fs = {...};
    
        2
  •  1
  •   Ian MacDonald    7 年前

    这个 export express 包是一个名为 createApplication (见 here )。调用此函数将生成一个对象。我相信这样做是为了 mixin

    另外,请记住,在JavaScript中,有 . 没有什么是严格意义上的对象。例如,此函数具有函数成员。

    exports = module.exports = createApplication;
    exports.query = require('./middleware/query');  // Assigning a member function to the `createApplication` function.
    

    因此,你可以打电话 express() ,但也要打电话 express.query('whatever') . 如果您试图将JavaScript解释为一种定义良好的面向对象语言,那么它将是非常荒谬的。

    推荐文章