Express.js是Node.js最流行的后端框架,它是JavaScript生态系统的一个广泛组成部分。
它被设计用来构建单页、多页和混合网络应用,它也成为用Node.js开发后端应用的标准,它是被称为MEVN栈的后端部分。
MEVN是一个免费和开源的JavaScript软件栈,用于构建动态网站和Web应用程序,它有以下组件:
- MongoDB:MongoDB是标准的NoSQL数据库。
- Express.js:用于构建网络应用的默认网络应用框架
- Vue.js:用于构建前端网络应用的JavaScript渐进式框架
- Node.js:用于可扩展的服务器端和网络应用的JavaScript引擎。
本指南将探讨Express.js框架的主要特点以及如何构建你的第一个应用程序。
什么是Express.js?
Express.js,有时也被称为 “Express”,是一个简约、快速、类似于Sinatra的Node.js后端框架,为开发可扩展的后端应用程序提供了强大的功能和工具。它为你提供了路由系统和简化的功能,可以根据你的应用程序用例,通过开发更强大的组件和部件来扩展框架。
Express.js 官方Logo
该框架为Web应用、HTTP请求和响应、路由和中间件提供了一套工具,用于构建和部署大规模、企业就绪的应用。
它还提供了一个名为Node Package Manager(NPM)的命令行界面工具(CLI),开发人员可以在这里为开发的包提供源码。它还迫使开发人员遵循 “不要重复自己”(DRY)原则。
DRY原则的目的是减少软件模式的重复,用抽象代替,或使用数据规范化来避免冗余。
Express.js的用途是什么?
Express.js在JavaScript/Node.js生态系统中被广泛使用,你可以用它开发应用程序、API端点、路由系统和框架。
下面列出了一些你可以用Express.js构建的应用程序类型。
单页面应用程序
单页应用程序(SPA)是现代应用程序开发的方法,其中整个应用程序被路由到一个单一的索引页面。Express.js是一个很好的框架,可以建立一个连接这些SPA应用程序的API,并持续地提供数据。单页应用的一些例子有Gmail、谷歌地图、Airbnb、Netflix、Pinterest、Paypal等等。公司正在使用SPA来建立一个流畅的、可扩展的体验。
实时协作工具
协作工具的出现缓解了企业日常工作和协作的方式,有了Express.js,你可以轻松地开发协作和实时网络应用。
此外,该框架还被用来开发实时应用程序,如聊天和仪表盘应用程序,在这里将WebSocket集成到框架中变得很简单。
Express.js处理路由和中间件的部分,使开发者在开发实时协作工具时能够集中精力处理这些实时功能的重要业务逻辑。
流媒体应用
像Netflix这样的实时流应用很复杂,有很多层的数据流。要开发这样的应用,你需要一个坚实的框架来有效处理异步数据流。
这是一个理想的框架,用于构建和部署企业就绪和可扩展的流媒体应用程序。
金融技术应用
金融技术是一种计算机程序和其他技术,用于支持或实现银行和金融服务。构建金融技术应用是目前的行业趋势,而Express.js是构建高度可扩展的金融技术应用的首选框架。
如果你想建立一个拥有大量用户和交易量的金融技术应用,那么你将加入Paypal和Capital One等公司,使用Express.js开发和部署你的应用。
为什么你应该使用Express.js
你应该考虑在你的下一个项目中使用Express.js的原因有几个,从加快请求和响应的I/O到其单线程系统和异步流程。它还使用MVC结构来简化数据操作和路由系统。
让我们仔细看看你应该考虑使用Express.js的一些主要原因。
灵活和快速
Express.js非常易于使用和灵活,而且它比其他Node.js框架都要快。作为一个简约的框架,它提供了快速的应用开发,并减轻了掌握一个大框架的许多不同部分的压力。它还提供了丰富的功能,如优秀的路由系统、中间件和内容协商,开箱即用。
MEAN栈的一部分
Express.js是在任何堆栈中以E代表的框架,如MERN、MEAN等。它也可以很容易地被集成到任何堆栈或技术中,以显示框架在MEAN堆栈开发过程中的重要性。
更重要的是,它可以与比传统的MySQL更强大的数据库管理系统有效连接,并提供了一个跨越每个堆栈的无缝开发过程。这种特性的结合使得Express.js在MEAN开发者中非常受欢迎。
可扩展性
多年来,Express.js已经被证明是非常可扩展的,因为每天都有很多大公司在他们的服务器上使用该框架。
它能有效地处理用户的请求和响应,在开发大规模的Web应用时几乎不需要额外的配置。
它有优秀的模块、包和额外的资源,这有助于开发人员创建可靠的、可扩展的网络应用程序。
被谷歌V8引擎支持
Express.js支持许多Google V8引擎包,这使得该框架在企业级构建和部署实时、协作和基于网络的应用程序方面非常强大。
Google V8引擎是一个开源的高性能JavaScript和WebAssembly引擎,它支持复杂和密集应用程序的高速和可扩展性。当你使用使用谷歌V8引擎的软件包时,对你的后端应用来说是一个巨大的性能和可扩展性提升。
社区支持
由于该框架是最流行的Node.js后端框架,它拥有最多的社区支持、资源和软件包,以应对任何开发挑战。来自谷歌的支持也很广泛,这使得该框架成为Node.js开发者中的热门选择。它的开源性质使开发者有机会创建可扩展的包和资源,以缓解开发,不仅是为他们自己,而且为所有其他使用Express.js编码的人。
强大的路由系统
该框架拥有最强大、最健全的路由系统,它可以协助你的应用程序通过一个特定的端点响应客户的请求。
通过Express.js中的路由系统,你可以使用框架的路由器实例将你臃肿的路由系统分割成可管理的文件。
Express路由系统有助于管理你的应用程序结构,它将不同的路由分组到一个文件夹/目录中。
开发人员通过使用Express路由器对功能进行分组,避免重复,从而创建更多可维护的代码。
中间件
Express.js是一个由一系列中间件组成的框架,以创造一个无缝的开发过程。
中间件是在HTTP请求到达路由处理程序之前或客户端收到响应之前执行的代码,使框架有能力在客户端请求之前或之后运行一个典型的脚本。
通过中间件,开发人员可以插入脚本来拦截应用程序的流程,例如,开发人员可以使用中间件来检查用户是否成功登录或注销。
Express.js如何工作
由于Express.js使用客户端-服务器模型来接受用户的请求并向客户端发回响应,因此它的工作方式与其他流行的框架(如Laravel)本身的工作方式并没有什么不同。
当用户通过输入网站地址从他们的网络浏览器发送请求时,浏览器会向应用程序/服务器发送一个HTTP请求(许多使用Express.js创建的应用程序都托管在云端的某个地方)。
服务器将通过它的一个路由接收请求,并使用与请求的路由相匹配的控制器来处理它。
处理完毕后,服务器将使用HTTP向客户端发送一个响应,因为这是一个来回的通信协议。
返回给客户端的响应可以是标准文本,也可以是一个动态的HTML页面,浏览器将处理并显示一个漂亮的网页,或者是JSON数据,前端开发人员将处理这些数据以显示网页上的信息。
让我们用Express.js创建一个简单的服务器来监听来自特定URL和端口号的传入请求:
const express = require('express') const app = express() const port = 4000 app.get('/', (request, response) => { response.send('Testing Hello World!') }) app.listen(port, () => { console.log(`Test app listening at http://localhost:${port}`) })
这就是一个简单的Express.js服务器,它将在http://localhost:4000/ 上监听传入的请求,并返回一个 “Testing Hello World!“的文本响应。
如何创建一个Express.js应用程序
现在,让我们使用新的Express.js 5.0创建一个真实世界的演示应用程序。为了开始,为你的新应用程序创建一个目录,并安装以下软件包:
mkdir first-express-app cd first-express-app npm install express@5.0.0-alpha.8 --save
接下来,在根目录下创建一个index.js文件,并在其中粘贴以下内容:
touch index.js
按照上面的演示设置好服务器后,我们将创建一个Todos数组,包含我们所有的todos,根据调用的终端返回给用户。在 index.js
文件中添加以下代码:
const express = require("express"); const app = express(); const port = 3000; app.listen(port, () => { console.log(`Test app listening at http://localhost:${port}`) }) const todos = [ { title: "Todo 1", desc: "This is my first Todo", completed: true, }, { title: "Todo 2", desc: "This is my second Todo", completed: true, }, { title: "Todo 3", desc: "This is my third Todo", completed: true, }, { title: "Todo 4", desc: "This is my fourth Todo", completed: true, }, { title: "Todo 5", desc: "This is my fifth Todo", completed: true, }, ]; // Data source ends here
接下来,我们将创建一个端点来检索存储在我们服务器中的所有 Todos
:
app.get("/todos", (request, response) => { response.status(200).json(todos); });
接下来是一个端点,根据todo的ID来检索单个Todo:
app.get("/todos/:id", (request, response) => { response .status(200) .json({ data: todos.find((todo) => todo.id === request.params.id) }); });
现在,一个端点来存储一个新的 todo
:
app.post("/todos", (request, response) => { todos.push(request.body); response.status(201).json({ msg: "Todo created successfully" }); });
接下来是一个端点,用 ID
更新一个现有的 todo
:
app.put("/todos/:id", (request, response) => { const todo = todos.find((todo) => todo.id === request.params.id); if (todo) { const { title, desc, completed } = request.body; todo.title = title; todo.desc = desc; todo.completed = completed; response.status(200).json({ msg: "Todo updated successfully" }); return; } response.status(404).json({ msg: "Todo not found" }); });
最后,我们将创建一个端点,根据 ID
删除单个 todo
:
app.delete("/todos/:id", (request, response) => { const todoIndex = todos.findIndex((todo) => (todo.id = request.params.id)); if (todoIndex) { todos.splice(todoIndex, 1); response.status(200).json({ msg: "Todo deleted successfully" }); } response.status(404).json({ msg: "Todo not found" }); });
这个代码片段展示了如何在Express.js中实现DELETE功能。它通过参数收集Todo的ID,并在数组中搜索匹配的ID并将其删除。
测试Express.js应用程序
现在是测试我们新的Express.js应用程序的时候了。
运行以下命令,用Postman测试我们新开发的REST API,确保我们有正确的数据:
node index.js
你可以从官方网站下载Postman并运行下面的测试。就这样,为了学习更多的知识,我们建议你使用我们在文章中讨论的方法创建更多的功能,并扩展你对Express.js的知识。
Express.js的API结果
小结
Express.js是Node.js生态系统中最受欢迎的框架,这也不难看出原因。它提供了广泛的优势和功能,可以从中受益。
Express.js的学习曲线很浅,使它非常简单,容易上手。它抽象了不必要的或不需要的网络应用程序功能,并为你提供了一个薄薄的核心功能层,使之具有灵活性。
更重要的是,由于Express.js框架是Node.js的基础,了解Express.js会自动让你对其他流行的框架有一个适当的掌握。这些知识可以帮助你在业务逻辑构建方面做出重要决定,除了Express.js之外,还可以使用哪个框架,以及何时使用默认包或用户包。
你接下来打算用Express.js构建什么?请在评论区告诉我们。
评论留言