使用 Node.js 和 Express 构建后端
嘿,大家好。我知道我已经失踪几个月了,我答应过我会更积极地发帖。说实话,有时候生活就是会给你带来麻烦,你得先照顾好自己。不过我现在来了,我们开始吧!
对于这篇(篇幅较长的)博文,我们的重点将转向后端。也就是说,我们将重点放在实现我们堆栈的服务器端功能上。
启动我们的 Node.js 后端
我们这次的目标是实现一个后端,该后端将与我之前的帖子中一直在研究的电话簿应用程序配合使用。
让我们使用npm init
命令为我们的应用程序创建一个新模板。我们将回答提出的问题,结果将是一个package.json
包含项目信息的文件。
在我们继续之前,让我们对我们的scripts
对象做一个小的改变:
我们可以node
从命令行直接运行该应用程序,如下所示:
node index.js
或者我们可以将其作为 npm 脚本运行,因为我们喜欢这样/懒惰:
npm start
该npm start
脚本有效,因为我们在 package.json 文件中定义了它!
使用 Express 框架
为了简化使用节点的服务器端开发并提供更简单的界面来与内置的 http 模块协同工作,我们可以使用名为Express的后端框架。
让我们使用以下命令将 express 安装为项目依赖项,然后将其添加到我们的package.json
文件中:
npm install express
我们后端服务器的主要目的是JSON
向前端提供该格式的原始数据。因此,我们现在可以修改index.js
文件,使其返回以下格式的硬编码人员列表,JSON
并添加一些快捷功能:
const express = require('express')
const app = express()
let people = [
{
name: "Hannah Rickard",
number: "06-51-99-56-83",
id: 1
},
{
name: "Hyun Namkoong",
number: "10987654",
id: 2
},
{
name: "Courtney Martinez",
number: "3691215",
id: 3
}
]
app.get('/', (request, response) => {
response.send('<h1>Phonebook</h1>')
})
app.get('/api/people', (request, response) => {
response.json(people)
})
const PORT = 3001
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`)
})
首先,我们在开始时index.js
导入 express,这是一个用于创建存储在app
变量中的 express 应用程序的函数:
const express = require('express')
const app = express()
现在,我们routes
为应用程序定义两个。第一个定义了一个事件处理程序,用于处理GET
对应用程序/
路由发出的 HTTP 请求:
app.get('/', (request, response) => {
response.send('<h1>Phonebook</h1>')
})
app.get('/api/people', (request, response) => {
response.json(persons)
})
事件处理函数接受两个参数。
- 第一个请求参数包含请求的所有信息
HTTP
。 - 第二个响应参数用于定义如何响应请求。
对于我们的第一个实例,请求是通过使用send
响应对象的方法来应答的。调用该方法会使服务器通过发送包含传递给该方法的HTTP
字符串 的响应来响应请求。<h1>Phonebook</h1>
send
app.get('/', (request, response) => {
response.send('<h1>Phonebook</h1>')
})
现在对于第二个实例,我们的路由定义了一个事件处理程序,用于处理GET
对我们应用程序路径发出的 HTTP 请求/people
(如果不熟悉,请在这里刷新您的记忆):
app.get('/api/people', (request, response) => {
response.json(people)
})
请求GET
通过响应对象的方法进行响应json
。调用此方法会将传入的 people 数组以 JSON 格式的字符串形式发送出去。是不是很棒?
最后,最后一行将HTTP
服务器绑定到分配给 app 变量,以监听发送到的 HTTP 请求PORT 3001
:
const PORT = 3001
app.listen(PORT)
console.log(`Server running on port ${PORT}`)
瞧!你终于完成了,现在我们已经成功GET
使用 express 发出了两个请求。一个是发往我们的/
路由,另一个是发往我们的people
路由。在接下来的文章中,我们将扩展该应用以支持 RESTful 规范。
出发前……
如果你喜欢额外的功课,或者像我一样是个超级成功者,那么不妨试试Nodemon这个小工具。你可能会问 Nodemon 是什么?根据它的文档:
nodemon 将监视启动 nodemon 的目录中的文件,如果任何文件发生变化,nodemon 将自动重新启动您的节点应用程序。
通常,当我们对后端代码进行更改时,我们必须费力地重新启动应用程序才能看到更改Ctrl+C
,然后重新启动npm start
。
与 React 中便捷的工作流程(浏览器在更改后自动重新加载)相比,这感觉有点烦人。但不用担心,nodemon 会帮我们搞定。
现在,后端代码的更改会导致服务器自动重启(但您仍然需要刷新浏览器)。
首先,安装 nodemon 并将其定义为开发依赖项:
npm install --save-dev nodemon
开发人员现在怎么办?我们说的开发依赖项,指的是那些仅在应用程序开发过程中需要的工具。在我们的例子中,这些工具用于自动重启后端。
要召唤 nodemon,我们只需:
node_modules/.bin/nodemon index.js
话说得有点拗口,所以你已经知道接下来会发生什么了,对吧?没错,就是这么写的!
您现在可以在开发者模式下启动服务器:
npm run dev
好多了。好了,说了这么多。等我们开始构建后端,让它可以抓取单个资源、删除数据,甚至接收新数据的时候再回来查看吧!记得休息一下,补充水分。继续加油!
资源:
Express 和 JSON
Express 发送
Express 库
Node.js
Nodemon 实用程序