速查表
Express.js 常用语法和配置速查表。
基础设置
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static('public'));
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
路由
app.get('/', handler);
app.post('/', handler);
app.put('/:id', handler);
app.patch('/:id', handler);
app.delete('/:id', handler);
app.all('/path', handler);
app.route('/users')
.get(getUsers)
.post(createUser);
const router = express.Router();
router.get('/', handler);
app.use('/api', router);
请求对象
req.params // 路径参数 /users/:id
req.query // 查询参数 ?page=1
req.body // 请求体 (需要 express.json())
req.headers // 请求头
req.cookies // Cookies (需要 cookie-parser)
req.ip // 客户端 IP
req.method // HTTP 方法
req.path // 请求路径
req.get('Header') // 获取请求头
响应对象
res.send(data) // 发送响应
res.json(data) // JSON 响应
res.status(200).json(data) // 设置状态码
res.redirect('/path') // 重定向
res.download('/file.pdf') // 文件下载
res.sendFile('/path/file.html') // 发送文件
res.render('view', data) // 渲染模板
res.set('Header', 'value') // 设置响应头
res.cookie('name', 'value') // 设置 Cookie
res.clearCookie('name') // 清除 Cookie
中间件
app.use(middleware); // 应用级中间件
app.use('/path', middleware); // 路径中间件
app.get('/path', middleware, handler); // 路由中间件
const middleware = (req, res, next) => {
next();
next(err);
};
错误处理
app.use((err, req, res, next) => {
res.status(500).json({ error: err.message });
});
next(new Error('Something went wrong'));
常用中间件
const helmet = require('helmet');
const cors = require('cors');
const morgan = require('morgan');
const rateLimit = require('express-rate-limit');
app.use(helmet());
app.use(cors());
app.use(morgan('dev'));
app.use(rateLimit({
windowMs: 15 * 60 * 1000,
max: 100
}));
JWT 认证
const jwt = require('jsonwebtoken');
const token = jwt.sign({ id: user.id }, secret, { expiresIn: '7d' });
const decoded = jwt.verify(token, secret);
const authMiddleware = (req, res, next) => {
const token = req.headers.authorization?.split(' ')[1];
if (!token) return res.status(401).json({ error: '未授权' });
try {
req.user = jwt.verify(token, secret);
next();
} catch (err) {
res.status(401).json({ error: 'Token 无效' });
}
};
Mongoose CRUD
const User = mongoose.model('User', schema);
await User.find();
await User.findById(id);
await User.findOne({ email });
await User.create(data);
await User.findByIdAndUpdate(id, data, { new: true });
await User.findByIdAndDelete(id);
await User.countDocuments();
文件上传
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
app.post('/upload', upload.single('file'), (req, res) => {
console.log(req.file);
});
app.post('/photos', upload.array('photos', 12), (req, res) => {
console.log(req.files);
});
测试
const request = require('supertest');
const app = require('./app');
test('GET /users', async () => {
const res = await request(app).get('/users');
expect(res.status).toBe(200);
});
test('POST /users', async () => {
const res = await request(app)
.post('/users')
.send({ name: 'Test' });
expect(res.status).toBe(201);
});
PM2 命令
pm2 start app.js
pm2 start app.js -i max
pm2 stop all
pm2 restart all
pm2 logs
pm2 monit
pm2 save
pm2 startup
Docker 命令
docker build -t app .
docker run -p 3000:3000 app
docker-compose up -d
docker-compose logs -f
docker-compose down
环境变量
require('dotenv').config();
process.env.NODE_ENV
process.env.PORT
process.env.DATABASE_URL
process.env.JWT_SECRET
常用状态码
| 状态码 | 描述 |
|---|---|
| 200 | OK |
| 201 | Created |
| 204 | No Content |
| 400 | Bad Request |
| 401 | Unauthorized |
| 403 | Forbidden |
| 404 | Not Found |
| 500 | Internal Server Error |