关于 express
面向 Node.js 开发者的 Express 技能,用于构建 HTTP 服务和 REST API。内容涵盖路由、中间件、请求校验、错误处理、安全响应头及生产部署实践。
主要功能
- 01Express 应用与中间件配置
- 02路由和路由器组织
- 03异步错误处理
- 04CORS 与安全响应头
- 05REST API 校验与响应
适用场景
- 01创建 Node.js HTTP 服务
- 02用路由器组织 REST API 端点
- 03处理异步路由处理器的异常
- 04为生产环境准备 Express 应用
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ partme-ai/ full-stack-skills --skill express安装后在 Claude Code 中输入/express确认已加载。
附带文件LICENSE.txt
详细介绍
何时使用此技能
当用户想要进行以下操作时,使用此技能:
- 使用 Express 路由和中间件构建 Node.js HTTP 服务
- 配置 CORS、请求体解析、错误处理和静态文件
- 创建包含请求验证和响应格式化的 REST API
- 搭建具备生产环境所需安全头的 Express 应用
如何使用此技能
工作流
- 创建应用 — 实例化 Express 并配置中间件
- 定义路由 — 为每个端点设置路由处理程序
- 添加错误处理 — 实现错误中间件,确保响应一致
- 部署 — 在反向代理后通过 HTTPS 运行
快速入门示例
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const app = express();
// Middleware
app.use(helmet());
app.use(cors());
app.use(express.json());
// Routes
app.get('/api/items', async (req, res, next) => {
try {
const items = await Item.findAll();
res.json({ items });
} catch (err) {
next(err);
}
});
app.post('/api/items', async (req, res, next) => {
try {
const { name, price } = req.body;
const item = await Item.create({ name, price });
res.status(201).json(item);
} catch (err) {
next(err);
}
});
// 404 handler
app.use((req, res) => {
res.status(404).json({ error: 'Not found' });
});
// Error middleware (must have 4 params)
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(err.status || 500).json({
error: err.message || 'Internal server error',
});
});
app.listen(3000, () => console.log('Server running on port 3000'));
异步错误包装器
// Wrap async handlers to catch rejected promises
const asyncHandler = (fn) => (req, res, next) =>
Promise.resolve(fn(req, res, next)).catch(next);
app.get('/api/users', asyncHandler(async (req, res) => {
const users = await User.findAll();
res.json(users);
}));
Router 示例
// routes/items.js
const router = require('express').Router();
router.get('/', asyncHandler(async (req, res) => { /* ... */ }));
router.post('/', asyncHandler(async (req, res) => { /* ... */ }));
router.get('/:id', asyncHandler(async (req, res) => { /* ... */ }));
module.exports = router;
// app.js
app.use('/api/items', require('./routes/items'));
最佳实践
- 将路由和中间件拆分到不同模块中;使用
express.Router()进行组织 - 始终使用 try/catch 或包装器包装异步处理程序,以避免未处理的拒绝
- 使用
helmet设置安全头,并针对生产环境的来源配置 CORS - 在生产环境中通过 HTTPS 部署在反向代理(nginx)后
- 使用
morgan记录请求日志,并返回结构化错误响应
参考资料
关键词
express、Node.js、中间件、路由、REST API、错误处理、异步、helmet、cors
评论
支持 Markdown