Appearance
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的核心概念,接下来可以深入了解路由、中间件、模板引擎等高级特性。