Ant Design 6.0 正式发布:前端开发者的福音与革新
2025年11月25日 11:50
Ant Design 6.0 正式发布:前端开发者的福音与革新 作为一名前端开发者,相信你对 Ant Design 都不陌生。这个拥有近10万Star的React UI组件库,一直以来都是企业级中后台
在开始学习Express之前,很多前端同学可能会问:我已经会React/Vue了,为什么还要学习后端框架?前端工程师不是应该专注于界面和用户体验吗?
答案在于:现代前端开发已经远远超越了"切图写界面"的范畴。全栈能力正在成为前端工程师的核心竞争力,而Express是理解Web开发全貌的最佳入口。
让我们通过一个简单的例子来感受两者的区别。
const http = require('http');
// 创建HTTP服务器
const server = http.createServer((req, res) => {
// 手动解析URL和请求方法
const { url, method } = req;
// 简单的路由判断
if (url === '/' && method === 'GET') {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('<h1>欢迎来到首页</h1>');
} else if (url === '/api/users' && method === 'GET') {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ users: ['张三', '李四'] }));
} else {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end('<h1>页面未找到</h1>');
}
});
// 启动服务器
server.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});
痛点分析:
const express = require('express');
const app = express();
const PORT = 3000;
// 路由处理变得极其简单
app.get('/', (req, res) => {
res.send('<h1>欢迎来到首页</h1>');
});
app.get('/api/users', (req, res) => {
res.json({ users: ['张三', '李四'] });
});
// 404处理
app.use('*', (req, res) => {
res.status(404).send('<h1>页面未找到</h1>');
});
app.listen(PORT, () => {
console.log(`Express服务器运行在 http://localhost:${PORT}`);
});
Express优势:
send, json等)首先确保你的系统已经安装Node.js(建议版本14+):
node --version # 检查Node.js版本
npm --version # 检查npm版本
# 创建项目目录
mkdir my-express-app
cd my-express-app
# 初始化package.json
npm init -y
# 安装Express
npm install express
建议采用清晰的项目结构:
my-express-app/
├── src/
│ ├── app.js # Express应用实例
│ ├── routes/ # 路由文件
│ ├── middleware/ # 自定义中间件
│ └── public/ # 静态资源
├── package.json
└── README.md
对于更复杂的项目,推荐使用官方生成器:
# 全局安装express-generator
npm install -g express-generator
# 创建项目
express --view=ejs my-advanced-app
# 安装依赖
cd my-advanced-app
npm install
# 启动项目
npm start
生成的项目结构更加完整:
my-advanced-app/
├── bin/
│ └── www # 服务器启动文件
├── public/ # 静态资源
├── routes/ # 路由文件
├── views/ # 模板文件
├── app.js # 主应用文件
└── package.json
中间件(Middleware) 是Express中最核心的概念。你可以把它想象成一个处理流水线,每个中间件就像是流水线上的一个工作站,对请求进行加工处理。
每个中间件函数都遵循相同的模式:
function middleware(req, res, next) {
// 对请求进行处理
console.log(`${req.method} ${req.url}`);
// 调用next()将控制权交给下一个中间件
next();
}
让我们创建一个完整的示例来理解中间件的工作流程:
const express = require('express');
const app = express();
// 1. 日志记录中间件
app.use((req, res, next) => {
const timestamp = new Date().toISOString();
console.log(`[${timestamp}] ${req.method} ${req.url}`);
next(); // 必须调用next()!
});
// 2. 静态文件服务中间件
app.use(express.static('public'));
// 3. body解析中间件
app.use(express.json()); // 解析JSON格式的请求体
app.use(express.urlencoded({ extended: true })); // 解析表单数据
// 4. 自定义认证中间件(模拟)
app.use('/api', (req, res, next) => {
// 检查API请求的认证信息
const token = req.headers.authorization;
if (!token) {
return res.status(401).json({ error: '未提供认证令牌' });
}
// 模拟token验证
if (token !== 'Bearer valid-token') {
return res.status(403).json({ error: '认证失败' });
}
console.log('认证通过');
next();
});
// 5. 业务路由
app.get('/', (req, res) => {
res.send('欢迎来到首页!');
});
app.post('/api/data', (req, res) => {
console.log('接收到的数据:', req.body);
res.json({ message: '数据接收成功', data: req.body });
});
// 6. 404处理中间件(放在最后)
app.use('*', (req, res) => {
res.status(404).send('页面未找到');
});
// 7. 错误处理中间件(四个参数)
app.use((err, req, res, next) => {
console.error('发生错误:', err);
res.status(500).json({ error: '服务器内部错误' });
});
const PORT = 3000;
app.listen(PORT, () => {
console.log(`服务器运行在 http://localhost:${PORT}`);
});
理解中间件的执行顺序至关重要:
请求进入
↓
日志中间件(记录请求信息)
↓
静态文件中间件(如果是静态文件请求,直接返回)
↓
Body解析中间件(解析请求体数据)
↓
认证中间件(检查API认证)
↓
路由处理(业务逻辑)
↓
404处理(如果没有匹配的路由)
↓
错误处理(如果发生错误)
// package.json 建议配置
{
"name": "my-express-app",
"version": "1.0.0",
"description": "Express实战项目",
"main": "src/app.js",
"scripts": {
"start": "node src/app.js",
"dev": "nodemon src/app.js",
"test": "jest"
},
"keywords": ["express", "nodejs"],
"author": "你的名字",
"license": "MIT"
}
陷阱1:忘记调用next()
// 错误示例
app.use((req, res, next) => {
console.log('这个中间件会阻塞整个应用!');
// 忘记调用next(),请求会一直挂起
});
// 正确做法
app.use((req, res, next) => {
console.log('正确处理请求');
next(); // 必须调用!
});
陷阱2:中间件顺序错误
// 错误顺序 - 404处理放在前面
app.use('*', (req, res) => {
res.status(404).send('页面未找到');
});
// 后面的路由永远不会执行
app.get('/', (req, res) => {
res.send('这个页面永远不会被访问到');
});
// 正确顺序
app.get('/', (req, res) => {
res.send('首页');
});
app.use('*', (req, res) => { // 404处理放在最后
res.status(404).send('页面未找到');
});
为了巩固理解,请尝试完成以下练习:
创建一个Express服务器,实现以下路由:
GET /:返回"首页欢迎语"GET /about:返回"关于我们"POST /contact:接收并返回联系人信息添加自定义中间件:
组织项目结构:
通过本文的学习,你应该已经掌握了:
Express的精髓在于"约定优于配置" - 它提供了一套优雅的约定,让Web开发变得更加愉快和高效。
在下一篇文章中,我们将深入探讨Express的路由系统,学习如何构建复杂的API接口和RESTful服务。
动手时间:按照文中的示例代码,亲手搭建你的第一个Express应用。遇到问题欢迎在评论区留言讨论!
提示:记得安装nodemon用于开发时的自动重启:npm install -D nodemon