Skip to content
On this page

Express快速入门

Express是一个快速、灵活、极简的Node.js Web应用开发框架。它提供了一系列强大的功能来开发Web和移动应用,同时保持代码的简洁性。

安装Express

创建项目

首先创建一个新的Node.js项目并安装Express:

bash
mkdir my-express-app
cd my-express-app
npm init -y
npm install express

基本服务器

创建一个最简单的Express服务器:

javascript
// app.js
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

运行服务器:

bash
node app.js

Express应用生成器

Express提供了一个命令行工具来快速生成应用骨架:

bash
# 安装Express生成器
npm install -g express-generator

# 创建新应用
express myapp
cd myapp
npm install
npm start

基本路由

路由定义了应用如何响应客户端请求。以下是基本路由示例:

javascript
const express = require('express');
const app = express();

// GET请求
app.get('/', (req, res) => {
  res.send('GET request to homepage');
});

// POST请求
app.post('/user', (req, res) => {
  res.send('POST request to /user');
});

// PUT请求
app.put('/user', (req, res) => {
  res.send('PUT request to /user');
});

// DELETE请求
app.delete('/user', (req, res) => {
  res.send('DELETE request to /user');
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

路径模式

Express支持多种路径模式:

javascript
// 精确匹配
app.get('/example', (req, res) => {
  res.send('/example');
});

// 模式匹配
app.get('/ab?cd', (req, res) => {
  res.send('/ab?cd'); // 匹配 /acd 或 /abcd
});

// 正则表达式
app.get(/.*fly$/, (req, res) => {
  res.send('/.*fly$/');
});

路由参数

使用路由参数从URL中捕获值:

javascript
app.get('/users/:userId/books/:bookId', (req, res) => {
  res.send(`User ID: ${req.params.userId}, Book ID: ${req.params.bookId}`);
});

// 可选参数
app.get('/users/:userId?', (req, res) => {
  if (req.params.userId) {
    res.send(`User ID: ${req.params.userId}`);
  } else {
    res.send('No user ID provided');
  }
});

查询参数

处理查询参数:

javascript
app.get('/search', (req, res) => {
  const { q, page = 1, limit = 10 } = req.query;
  res.json({
    query: q,
    page: parseInt(page),
    limit: parseInt(limit)
  });
});

中间件使用

中间件函数可以访问请求对象(req)、响应对象(res)和next函数:

javascript
const express = require('express');
const app = express();

// 应用级中间件
app.use((req, res, next) => {
  console.log(`${new Date().toISOString()} - ${req.method} ${req.path}`);
  next();
});

// 路由级中间件
app.get('/', (req, res, next) => {
  console.log('Time:', Date.now());
  next();
}, (req, res) => {
  res.send('Hello World!');
});

// 错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

静态文件服务

使用Express内置的static中间件提供静态文件:

javascript
// 提供public目录下的静态文件
app.use(express.static('public'));

// 使用自定义虚拟路径前缀
app.use('/static', express.static('public'));

常用中间件

解析JSON和URL编码的请求体

javascript
app.use(express.json()); // 解析JSON请求体
app.use(express.urlencoded({ extended: true })); // 解析URL编码的请求体

启动服务器

javascript
const server = app.listen(3000, 'localhost', () => {
  console.log(`Server running at http://localhost:3000`);
});

// 优雅关闭
process.on('SIGTERM', () => {
  server.close(() => {
    console.log('Process terminated');
  });
});

推荐的项目结构

my-express-app/
├── package.json
├── app.js
├── routes/
│   ├── index.js
│   └── users.js
├── middleware/
│   └── auth.js
├── public/
│   ├── css/
│   ├── js/
│   └── images/
├── views/
│   └── index.html
└── config/
    └── database.js

环境配置

使用环境变量管理配置:

javascript
const port = process.env.PORT || 3000;
const nodeEnv = process.env.NODE_ENV || 'development';

这个快速入门涵盖了Express的核心概念,接下来可以深入了解路由、中间件、模板引擎等高级特性。