“express”、“http”和“connect”在技术上有什么区别?

9
var express = require("express")
  , app = express()
  , http = require("http").createServer(app)

我经常看到这些依赖被放在项目中。据我了解,http hosts 前端html,而express则负责处理服务器端的nodejs逻辑。而connect是express的基础层,那它是否也是一个服务器端模块呢?

如果不是这样,为什么不直接这样做:

express().listen(8080)

代替
require("http").createServer(express()).listen(8080)
3个回答

17

Express是建立在http之上的另一层抽象,它处理了Web应用程序所需的基本重复任务。 connect是一个中间件,也处理了Web应用程序所需的基本重复任务。

使用任何框架的整个想法都是要保持DRY(不要重复自己)。对于每个Web应用程序,像解析请求体、解析cookie之类的任务都非常必要。 Express默认提供它们。

在Express 4.x中,大部分已经重构为几个细粒度模块,例如body-parsermorgan等。可以直接使用它们,而不使用express。请参见Express - GitHub获取完整的模块集。

Express是建立在http之上的另一层抽象,意味着Express内部使用http。换句话说,它是http的包装器。如果您查看Express的源代码,您会发现它在内部使用http。请参考以下突出显示的语句https://github.com/strongloop/express/blob/master/lib/application.js#L540-543


另外,什么是在HTTP之上具有Express层的意思? - user2167582
@user2167582,“DRY”代表“不要重复自己”,正如答案中所述。我会更新答案以解决您的第二个问题。 - Sarbbottam

0

其实并没有什么区别,你可以在github repo中查看express.listen()的代码。这段代码调用了HTTP模块中的createServer函数。换句话说,这更像是一种快捷方式。


0

让我们举个例子来理解http模块和express模块之间的区别。

例如,考虑http模块是一辆汽车,即一辆普通商用车。

而另一方面,将express视为超级跑车。

可以看到,http模块提供了各种工具(函数)来处理网络事务,如制作服务器客户端等。

express则是在http模块的基础上构建的,具有更多可用性和更好的功能,如易于处理路由、易于制作固件、服务器、客户端等。

就像普通汽车和超级跑车(可能是豪华车)之间的区别一样。它们最终都是汽车,但豪华车的功能更多,易于使用,就像在express.js中一样。

来源


3
Express是一个Web服务器框架,用于构建应用程序。它不是“超级跑车”与“普通汽车”的区别,而是“汽车”与“发动机”的区别。HTTP是发动机,就像汽车中的发动机促进运动一样,它促进连接和请求的实现。Express就像包围发动机的汽车一样,是使发动机有用的东西。 - NBTX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接