Express是NodeJS生态中一个应用广泛的HTTP服务端开发框架,曾经非常流行的号称JavaScript全栈解决方案的MEAN(MongoDB,Express,Angular,NodeJS)就包括了Express。和其它各种框架相比,Express非常的轻量级而且设计精良,这里我们简单了解一下这个框架的功能特性和使用方法。
项目Github地址:https://github.com/expressjs/express
我们可以使用以下命令用npm
在NodeJS项目中安装express
:
npm install --save express
目前Express最新版本为4.18.2,安装完成后,我们就可以使用Express提供的API进行服务端逻辑的开发了。
下面代码是使用Express开发的一个最简单的HTTP服务端例子,源代码只有单个文件,它会监听8080端口,并接收路径/
的请求,返回200状态码和一个字符串。
index.js
const express = require('express');
const router = express.Router();
const SERVER_PORT = 8080;
const app = express();
router.get('/', (req, res, next) => {
res.status(200).send('Hello, world!');
});
app.use(router);
app.listen(SERVER_PORT, () => {
console.log('Express server listen on %d...', SERVER_PORT);
});
对于代码内容将在后续章节详细介绍,这里只是作为一个简单示例。我们可以使用node ./index.js
命令运行代码,并使用浏览器访问http://localhost:8080
查看效果。
在开发过程中,我们经常需要修改代码并查看效果。Express目前没有办法实现像Java中Jrebel等那样的热更新,但Express启动极为迅速,因此热重启也能满足我们开发阶段的要求,热重启可以使用nodemon
工具实现。
官方网站:https://nodemon.io/
npm install --save-dev nodemon
启动工程时,我们使用nodemon
替换node
命令即可,该命令可以配置在package.json
中,下面是一个例子:
{
// ... 其他配置
"scripts": {
"start": "nodemon ./index.js"
},
// ... 其他配置
}
使用nodemon
启动后会输出如下日志,我们可以看到它默认监听了工程的所有路径下的js
、mjs
、json
文件,当这些文件改动后nodemon
会自动重启工程。
[nodemon] 2.0.22
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node ./index.js`
有关nodemon
更复杂的用法可以参考官方文档。
NodeJS程序推荐使用VSCode进行开发,VSCode中我们可以创建一个启动和调试配置文件,可以很方便的实现断点调试。下面配置是一个参考,它会执行npm start
命令启动项目,并附加调试器。
.vscode/launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "npm start",
"request": "launch",
"runtimeArgs": [
"start"
],
"runtimeExecutable": "npm",
"skipFiles": [
"<node_internals>/**"
],
"type": "node"
}
]
}
创建好调试配置后,我们就可以直接使用VSCode的启动按钮来运行项目了。
对于生产环境,我们一般不建议直接使用类似node ./index.js
的命令来运行项目,生产环境推荐使用pm2
等进程管理工具管理Node进程,它可以在Node进程意外崩溃后立即拉起进程恢复服务。
在服务器环境中,我们可以全局安装pm2
工具:
npm install -g pm2
安装完成后,使用以下命令启动工程:
pm2 start ./index.js
如果使用Docker进行部署,我们需要让pm2
进程留在前台:
pm2 start ./index.js --no-daemon
有关pm2
的更多介绍,可以参考NodeJS/第三方模块/pm2-服务进程管理
章节。