Express简介和环境搭建

Express是NodeJS生态中应用最为广泛的HTTP服务端开发框架,曾经非常流行的号称JavaScript全栈解决方案的MEAN(MongoDB、Express、Angular、NodeJS)就包括了Express。和其它各种框架相比,Express非常轻量级而且设计精良,学习曲线平缓,非常适合作为NodeJS后端开发的入门框架。本系列笔记将详细介绍Express框架的使用方法。

官方网站:https://expressjs.com/

项目Github地址:https://github.com/expressjs/express

安装Express

我们可以使用以下命令用npm在NodeJS项目中安装express

npm i express

目前Express最新版本为5.2.1,安装完成后,我们就可以使用Express提供的API进行服务端逻辑的开发了。

编写一个例子

下面代码是使用Express开发的一个最简单的HTTP服务端例子,源代码只有单个文件,它会监听8080端口,接收路径/的GET请求,并返回200状态码和一个字符串。

index.js

import express from "express";

const SERVER_PORT = 8080;

const app = express();
const router = express.Router();

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);
});

注意:我们这里使用的是ESM模块机制,因此需要在package.json中添加"type": "module"配置。

package.json

{
  "name": "demo-node",
  "version": "1.0.0",
  "type": "module",
  "main": "src/index.js",
  "scripts": {
    "start": "node src/index.js",
    "dev": "node --watch src/index.js"
  },
  "dependencies": {
    "express": "^5.2.1"
  }
}

对于代码内容将在后续章节详细介绍,这里只是作为一个简单示例。我们可以使用npm run dev命令运行代码,并使用浏览器访问http://localhost:8080查看效果。

调试Express程序

NodeJS程序推荐使用VSCode进行开发,VSCode中我们可以创建一个启动和调试配置文件,可以很方便的实现断点调试。下面配置是一个参考,它会执行npm run dev命令启动项目,并附加调试器。

.vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug Express",
      "request": "launch",
      "runtimeArgs": ["run", "dev"],
      "runtimeExecutable": "npm",
      "skipFiles": ["<node_internals>/**"],
      "type": "node"
    }
  ]
}

创建好调试配置后,我们就可以直接使用VSCode的启动按钮来运行项目了,在代码行号左侧点击即可添加断点,程序执行到断点处会自动暂停,我们可以查看变量值、调用栈等信息。

生产环境部署Express程序

对于生产环境,我们一般不建议直接使用类似node ./index.js的命令来运行项目,生产环境推荐使用pm2等进程管理工具管理Node进程,它可以在Node进程意外崩溃后立即拉起进程恢复服务,还支持集群模式、日志管理等功能。

如果使用虚拟机或物理主机部署,在服务器环境中我们可以全局安装pm2工具。

npm install -g pm2

安装完成后,使用以下命令启动Express工程。

pm2 start ./index.js

如果使用Docker进行部署,我们需要让pm2进程留在前台,这时应该使用pm2-runtime命令。

pm2-runtime start ./index.js

有关pm2的更多介绍,可以参考NodeJS/第三方模块/pm2-服务进程管理章节。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。