尽管非常了解JavaScript,但我对Node.js生态系统中的这三个项目的确切用途感到困惑。像Rails的架子吗?有人可以解释一下吗?
什么是Node.js的Connect,Express和“中间件”?
愚蠢的简单答案
Connect和Express是Node.js的Web服务器。与Apache和IIS不同,它们都可以使用相同的模块,称为“中间件”。
相关信息,尤其是在使用NTVS与Visual Studio IDE配合使用时。NTVS在Visual Studio 2012、2013中添加了NodeJS和Express工具,脚手架,项目模板。
另外,调用ExpressJS或Connect作为“ WebServer”的语言不正确。您可以创建带有或不带有它们的基本WebServer。基本的NodeJS程序也可以使用http模块来处理http请求,从而成为基本的Web服务器。
Node.js
本身提供了一个HTTP模块,其createServer方法返回一个可用于响应HTTP请求的对象。该对象继承了http.Server
原型。
Connect为常见的HTTP服务器功能(例如会话管理,身份验证,日志记录等)提供了“更高级别”的API。Express是在具有高级(类似于Sinatra)功能的Connect之上构建的。
node.js
Node.js是服务器端的JavaScript引擎。
除了所有js功能之外,它还包括联网功能(如HTTP)和对文件系统的访问。
这与客户端js不同,在客户端js中,网络任务由浏览器垄断,并且出于安全原因,禁止访问文件系统。
作为网络服务器的node.js:表达
在服务器中运行的东西可以理解HTTP,并且可以访问文件,就像Web服务器一样。但这不是一个。
为了使node.js像Web服务器一样工作,必须对其进行编程:处理传入的HTTP请求并提供适当的响应。
Express就是这样做的:这是js中Web服务器的实现。
因此,实现网站就像配置Express路由,并对网站的特定功能进行编程一样。
中间件和连接
服务页面涉及许多任务。这些任务中的许多是众所周知的且非常常见,因此节点的Connect模块(可在节点下运行的许多模块之一)实现了这些任务。
查看当前令人印象深刻的产品:
- 具有自定义格式支持的记录器请求记录器
- csrf 跨站点请求伪造保护
- 压缩 Gzip压缩中间件
- basicAuth 基本的http认证
- bodyParser 可扩展请求主体解析器
- json 应用程序/ json解析器
- urlencoded 应用程序/ x-www-form-urlencoded解析器
- 多 部分多部分/表单数据解析器
- 超时 请求超时
- cookieParser cookie解析器
- 捆绑的MemoryStore支持会话会话管理
- cookieSession 基于cookie的会话支持
- methodOverride faux HTTP method support
- responseTime calculates response-time and exposes via X-Response-Time
- staticCache memory cache layer for the static() middleware
- static streaming static file server supporting Range and more
- directory directory listing middleware
- vhost virtual host sub-domain mapping middleware
- favicon efficient favicon server (with default icon)
- limit limit the bytesize of request bodies
- query automatic querystring parser, populating req.query
- errorHandler flexible error handler
Connect is the framework and through it you can pick the (sub)modules you need.
The Contrib Middleware page enumerates a long list of additional middlewares.
Express itself comes with the most common Connect middlewares.
What to do?
Install node.js.
Node comes with npm, the node package manager.
The command npm install -g express
will download and install express globally (check the express guide).
Running express foo
in a command line (not in node) will create a ready-to-run application named foo. Change to its (newly created) directory and run it with node with the command node <appname>
, then open http://localhost:3000
and see.
Now you are in.
[ 更新:从4.0版本开始,Express不再使用Connect。但是,Express仍与为Connect编写的中间件兼容。我的原始答案如下。
我很高兴您提出这个问题,因为对于那些关注Node.js的人们来说,这无疑是一个常见的困惑点。这是我最好的解释:
Node.js本身提供了一个http模块,该模块的
createServer
方法返回一个对象,您可以使用该对象来响应HTTP请求。该对象继承了http.Server
原型。Connect还提供了一种
createServer
方法,该方法返回继承了扩展版本的对象http.Server
。Connect的扩展主要用于简化中间件的插入。这就是为什么Connect将自己描述为“中间件框架”的原因,并且通常类似于Ruby的Rack。Express确实做到了Connect对http模块所做的连接:它提供了
createServer
一种扩展ConnectServer
原型的方法。因此,这里提供了Connect的所有功能,以及视图渲染和用于描述路线的便捷DSL。Ruby的Sinatra是一个很好的类比。然后还有其他框架可以扩展Express!例如Zappa,它集成了对CoffeeScript,服务器端jQuery和测试的支持。
这是“中间件”含义的具体示例:开箱即用,以上都不为您提供静态文件。但是,只需connect.static
插入(配置为Connect附带的中间件),该中间件配置为指向目录,您的服务器即可提供对该目录中文件的访问。请注意,Express还提供了Connect的中间件。express.static
与相同connect.static
。(两者都被称为staticProvider
直到最近。)
我的印象是,如今,大多数“真正的” Node.js应用都是使用Express开发的。它添加的功能非常有用,并且如果需要,所有较低级别的功能仍然存在。
中间件顾名思义,中间件实际上位于中间之间。中间是什么?请求和响应的中间.. 在此图片中,请求,响应,快速服务器如何位于快速应用程序中,您可以看到请求是来自客户端的,然后快速服务器将为那些请求提供服务。这样,整个快递服务器的整个任务就变成了小的单独任务。 中间件如何位于请求和响应之间小服务器部分执行某项特定任务并将请求传递给下一个..最终完成了所有任务的响应。所有中间件都可以访问请求对象,响应对象和请求的下一个功能响应周期
这是在中间件Express youtube视频中解释中间件的好例子