You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中require()的作用是什么?Express实例化相关疑问

嘿,刚接触Node.js和Express完全不用不好意思,这种写法一开始确实容易懵,我来给你掰扯清楚~

先搞懂require('express')返回的是什么

首先,require('express')加载完模块后,返回的不是一个你以为的Express类,而是一个可以直接调用的函数,而且这个函数本身就帮你做好了实例化的脏活累活。

为什么myApp()就能创建实例?

Express的作者在设计模块的时候,把创建应用实例的逻辑封装成了一个函数。当你调用myApp()(也就是调用这个从require拿到的函数),它内部其实已经悄悄完成了类似new Express()的操作,直接给你返回一个现成的Express应用实例——也就是你代码里的myCode。

举个简化的模拟例子(不是真实源码,但逻辑一致):

// Express模块内部大概是这么设计的
function createExpressApp() {
  // 这里偷偷做初始化:创建实例、挂载路由/监听方法等
  const app = {
    get: function(path, handler) {},
    listen: function(port) {}
    // ...其他你熟悉的Express方法
  };
  return app;
}

// 把这个创建实例的函数导出,让require能拿到
module.exports = createExpressApp;

你看,var myApp = require('express')拿到的就是这个createExpressApp函数,调用它myApp()就得到了app实例,是不是和你熟悉的匿名函数调用var myCode = myApp()逻辑完全一致?

你想的new Express()为啥不对?

其实早期的Express版本确实是用new Express()来创建实例的,但后来作者为了简化API,改成了直接调用函数的方式。现在去看Express源码会发现,那个导出的函数内部还是会用new去实例化核心类,但这个过程被封装起来了,不用我们自己写new了,用起来更省心。

再补一句require的作用

require是Node.js里用来加载模块的工具——不管是Node内置的模块(比如fs)、第三方包(比如express),还是你自己写的本地模块,都靠它加载。加载后会返回模块导出的内容:这个内容可以是函数、对象、类、字符串等等,完全看模块作者怎么设计。Express就选择导出一个创建实例的工厂函数,让我们调用起来更简单。

总结一下:

  • require('express')拿到的是一个创建Express应用的工厂函数
  • 调用这个函数myApp(),就会返回一个配置好的Express应用实例
  • 这种写法是Express为了简化使用做的设计,本质和你熟悉的匿名函数调用逻辑是通的

内容的提问来源于stack exchange,提问作者user7552709

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:54:27