创建Express.js应用程序的步骤
Express是最流行的极简框架。它是建立在NodeJS的内置模块HTTP之上,通过API使前端和后端逻辑之间的交互变得简单易用,同时它还使我们能够以非常美观的方式组织业务逻辑。它非常灵活,可以用于Web和Android。此外,它还提供了一套非常简单的错误处理过程。
方法: 以下是编写Express应用程序的基本步骤。在这里,我们涵盖了设置环境并安装模块,创建应用程序,运行Web服务器以及与服务器进行基本通信等主题。必须知道如何使用Node包管理器进行基本工作,了解终端安装依赖项和模块的基本知识,了解Web应用程序的工作原理,并具备良好的ES6知识。
逐步实施:
步骤1: 在您的终端中输入以下命令,创建一个Node.js应用程序,因为我们的Express服务器将在Node应用程序内工作。
语法:
这将要求您对您的项目进行一些配置,您可以相应地填写它们,也可以稍后从 package.json 文件中进行更改。
注意: 使用npm init -y
进行默认初始化
步骤2: 为我们的应用程序安装必要的依赖项。
成功安装后会显示类似以下内容:
步骤3: 项目结构将如下所示。
创建一个文件 app.js ,对于这篇文章,我们将在这个文件中编写所有的express代码。这将是我们的文件夹结构。现在在app.js文件中,通过require关键字导入express,并通过调用express框架提供的 express() 函数创建一个应用程序。设置我们本地应用程序的端口,3000是默认值,但你可以根据端口的可用性选择任何端口。调用 listen() 函数,它需要路径和回调作为参数。它开始在指定的路径上监听连接,默认主机是localhost,本地机器的默认路径是 localhost:3000 ,这里的3000是我们之前设置的端口。回调函数在服务器成功启动或出现错误时被执行。
app.js
运行应用程序的步骤: 现在,我们已经创建了一个服务器,可以成功开始运行它以查看它的工作情况,请在您的终端中写入以下命令以启动Express服务器。
输出: 在终端上你会看到类似这样的东西。
现在,我们已经成功创建并运行了服务器,如果您的服务器没有启动,则可能存在一些错误,请尝试分析和阅读该错误,并相应地解决它。
最后,在成功运行后,如果尝试在浏览器上打开URL (localhost:3000) 将显示 无法访问 / 因为我们还没有在此应用程序上配置任何路由。
步骤4: 现在我们将为我们的应用程序设置所有路由。
路由是服务器的端点,它们在我们的后端服务器上进行配置,每当有人尝试访问这些端点时,它们会根据后端的定义进行相应的响应。如果您是初学者,可以将路由视为在有人请求与该函数关联的特殊路径时调用的函数,并将预期的值作为响应返回。我们可以为get、post、put等HTTP方法创建路由。
语法: 这些类型路由的基本语法如下,当路径和请求方法相同时,给定函数将执行。
示例1: 在服务器的根URL(’/ ‘路径)上设置一个基本的GET请求路由。
- 使用 app.get() 来配置第一个路由,它需要两个参数,第一个是路径,第二个是当有人使用GET方法请求该路径时将执行的函数。Express会将请求和响应对象作为参数提供给所有这些类型的函数。
- req 是从用户那里接收到的一个大对象, res 是在函数执行完成后将发送给用户的对象。
- 之后,我们调用 status() 方法,它以HTTP状态码作为参数,当响应返回时,状态将被一并发送。
- 最后,我们将响应返回给用户。使用 send() 方法可以向客户端发送字符串、对象、数组或缓冲区作为参数,用于将数据对象作为HTTP响应发送回客户端。Express还有许多其他类型的响应,例如 res.json() 用于发送JSON对象, res.sendFile() 用于发送文件等。
app.js
运行应用程序的步骤: 保存这段代码,重新启动服务器,并在给定端口上打开本地主机。当客户端使用适当的方法在指定的路径上发出请求时, 例如:在’/’路径上发出GET请求, 我们的函数将以纯文本形式返回响应。 **** 如果我们在Chrome开发者工具中打开网络部分(按Ctrl+Shift+I打开),我们将看到本地主机返回的响应以及所有信息。
输出:
示例2: 在路径 ‘/hello’ 上设置一个额外的get请求路由。
- 大部分与前一个示例相同。
- 使用 set() 函数将HTTP头的内容类型设置为HTML。当浏览器接收到该响应时,将被解释为HTML而不是纯文本。
- 在这个示例中,我们没有显式地设置状态,它现在与发送响应的语句连接在一起。这是在响应中发送状态的另一种方法。
app.js
运行该应用的步骤: 将此代码保存,重新启动服务器,并在给定端口上打开本地主机。现在从浏览器访问’/hello’路由,HTML内的h1文本将作为响应显示。
输出:
步骤5: 现在让我们看看如何将数据发送到服务器。
有时我们必须将我们的数据发送到服务器进行处理,例如当您尝试在Facebook上登录时,您会将密码和电子邮件发送到服务器。在这里,我们将看到如何从用户请求中接收数据。我们可以使用请求对象和适当的HTTP方法将数据发送到指定路径上。到目前为止,我们使用浏览器与服务器进行交互,但是在这一步中,必须使用任何工具或前端表单来发送数据,因为浏览器搜索栏只能发送get请求以从服务器接收资源。
示例: 设置一个可以通过用户访问的路由,用于发送post请求的数据。
- 在创建用于接收数据的路由之前,我们使用了一个内置的中间件。中间件是如此广泛且更高级的主题,所以我们不会在这里讨论它,只是为了简单了解一下,你可以将其看作在请求-响应周期之间执行的代码片段。
- 使用 express.json() 中间件来将传入的请求对象解析为JSON对象。app.use() 是使用任何中间件的语法。
- 之后,我们创建了一个路径为 ‘/’ 的路由,用于post请求。
- const {name}, 这是ES6中提取对象中给定属性/属性集的语法。在这里,我们提取了用户通过此请求对象发送的 name 属性。
- 之后,我们简单地发送一个 响应 以表示我们已成功接收到数据。如果这个
${}
对您来说看起来很奇怪,那么让我告诉您,这是ES6中使用javascript表达式生成字符串的语法。我们可以在${}内部插入任何javascript表达式。
app.js
运行应用程序的步骤: 通过Postman访问路径。它是一个用于测试API的工具,我们可以使用其他前端工具如Axios、fetch,或者终端中的cURL等。但这会偏离我们的主题,只需要记住我们的express服务器只需要一个带有请求对象的路径,无论它来自何处。我们已经将数据作为JSON对象发送到了请求体中,express会将响应和数据一起发送回来。这表明我们成功将数据发送到了服务器。
输出:
步骤5:从服务器发送文件
步骤6: 现在我们将看到如何从服务器发送文件。
多次我们需要根据用户请求从服务器传输资源,主要有两种方法来发送文件,一种是使用中间件发送静态文件,另一种是在路由上发送单个文件。
这是我们的文件夹结构,我们希望将文件作为静态文件从 Static Files 目录提供,并将 image.jpg 提供在单独的路由上。
示例1: 使用中间件服务整个目录
Express为我们提供了一个中间件 express.static() , 它接受两个参数,第一个是要提供文件的目录的绝对路径。
我们可以通过将它提供给 app.use() 来简单地用它来提供静态文件。
语法:
- 首先,我们导入内置模块
path
,因为我们将在稍后使用该模块提供的一个函数。 - 我们只是在路由 ‘/static’ 上挂载了一个中间件。
- static() 中间件需要一个绝对路径,所以我们使用了 path 模块的 join 方法。
- join() 方法接受两个参数并将它们作为路径组合在一起,在 NodeJS 中有一个全局属性 __dirname ,它包含了当前文件所在的目录的路径。
- 我们将这个组合路径提供给中间件,这样中间件就可以在给定路径上开始提供该目录中的文件。
app.js
运行应用的步骤: 当我们从作为静态服务的目录中请求某些静态文件时,这将是返回的响应。在这里,您可以看到我们收到了一个HTML文件作为响应, ‘/static/random.html’ 。当我们请求 ‘/static/1.jpg’ 时,同样的事情发生。
输出:
示例2: 使用sendFile()函数在路由上发送单个文件。
此函数接受文件的绝对URL,每当访问路由路径时,服务器将文件作为HTTP响应提供。 这个过程可以被视为express.static()的一个单一端点。 当我们必须在发送文件之前进行某种处理时,这是非常有用的。
语法:
- 我们正在创建一个get请求路由,其路径为 ‘/file’
- 之后,通过连接当前 __dirname 的路径和我们想要发送的文件的文件名,创建绝对路径,然后将其传递给 sendFile()。
- 然后路由将 image.jpg 文件作为 HTTP 响应发送给用户。
app.js
输出: 运行服务器后,当我们请求路由 ‘/file’ 时,服务器将图像.jpg文件作为响应发送。