Express.js 是一个轻量级、灵活且功能强大的 Node.js Web 应用框架,广泛用于构建 Web 应用程序和 API。它以其简洁的语法和模块化设计而闻名,非常适合快速开发后端服务。以下是关于 Express.js 的详细介绍以及如何高效使用它的指南。
Express.js 提供了一系列强大的功能,使其成为全栈开发中的首选后端框架之一:
const express = require('express');
const app = express();
// 定义路由
app.get('/', (req, res) => {
res.send('Hello, World!');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
// 自定义中间件
app.use((req, res, next) => {
console.log(`Request Type: ${req.method}, URL: ${req.url}`);
next(); // 继续执行下一个中间件
});
app.set('view engine', 'ejs'); // 设置模板引擎为 EJS
app.get('/home', (req, res) => {
res.render('home', { title: 'Welcome to Express' });
});
app.use(express.static('public')); // 托管 public 文件夹中的静态文件
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
RESTful API 是现代 Web 开发中常见的后端架构模式,Express.js 是实现它的理想工具。
以下是一个简单的博客系统 API 示例,包含文章的增删改查操作。
npm init -y
npm install express body-parser mongoose
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
const PORT = 3000;
// 连接 MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/blog', { useNewUrlParser: true, useUnifiedTopology: true });
// 定义数据模型
const BlogSchema = new mongoose.Schema({
title: String,
content: String,
});
const Blog = mongoose.model('Blog', BlogSchema);
// 解析 JSON 请求体
app.use(bodyParser.json());
// 创建文章
app.post('/api/blogs', async (req, res) => {
const { title, content } = req.body;
const blog = new Blog({ title, content });
await blog.save();
res.status(201).json(blog);
});
// 获取所有文章
app.get('/api/blogs', async (req, res) => {
const blogs = await Blog.find();
res.json(blogs);
});
// 获取单篇文章
app.get('/api/blogs/:id', async (req, res) => {
const blog = await Blog.findById(req.params.id);
if (!blog) return res.status(404).send('Blog not found');
res.json(blog);
});
// 更新文章
app.put('/api/blogs/:id', async (req, res) => {
const { title, content } = req.body;
const blog = await Blog.findByIdAndUpdate(req.params.id, { title, content }, { new: true });
if (!blog) return res.status(404).send('Blog not found');
res.json(blog);
});
// 删除文章
app.delete('/api/blogs/:id', async (req, res) => {
const blog = await Blog.findByIdAndDelete(req.params.id);
if (!blog) return res.status(404).send('Blog not found');
res.send('Blog deleted');
});
// 启动服务器
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
});
为了提升项目的可维护性和性能,可以结合以下工具和最佳实践:
通过 dotenv
管理环境变量,避免硬编码敏感信息。
npm install dotenv
require('dotenv').config();
const PORT = process.env.PORT || 3000;
const MONGO_URI = process.env.MONGO_URI;
mongoose.connect(MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true });
.env
文件示例:
PORT=3000
MONGO_URI=mongodb://localhost:27017/blog
使用 morgan
记录 HTTP 请求日志。
npm install morgan
const morgan = require('morgan');
app.use(morgan('dev'));
使用 Joi
或 express-validator
验证用户输入。
npm install express-validator
const { body, validationResult } = require('express-validator');
app.post(
'/api/blogs',
[
body('title').notEmpty().withMessage('Title is required'),
body('content').notEmpty().withMessage('Content is required'),
],
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// 处理有效数据
}
);
compression
中间件压缩响应数据。npm install compression
const compression = require('compression');
app.use(compression());
尽管 Express.js 功能强大,但在某些场景下可能需要更高级的框架或工具:
NestJS
(基于 Express 的现代化框架)。Socket.IO
实现实时聊天等功能。Apollo Server
。Express.js 是一个简单但功能强大的后端框架,适合快速构建 Web 应用和 API。通过合理使用中间件、数据验证、日志记录和性能优化工具,你可以构建出高效、稳定的后端服务。
如果你正在使用 Cursor 开发 Express.js 项目,可以充分利用其 AI 功能来加速编码过程,例如: