网站首页 > 基础教程 正文
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
// 模拟数据库
const db = {
users: [
{ id: 1, username: 'user1', email: 'user1@example.com' },
// ...更多用户
],
// ...其他数据模型
};
// 应用中间件
app.use(express.json()); // 解析请求体中的JSON数据
// JWT密钥
const secretKey = 'your-secret-key';
// 鉴权中间件
app.use((req, res, next) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (token == null) return res.sendStatus(401);
jwt.verify(token, secretKey, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
});
// 分页处理中间件
app.use((req, res, next) => {
const page = req.query.page ? parseInt(req.query.page) : 1;
const limit = req.query.limit ? parseInt(req.query.limit) : 10;
const startIndex = (page - 1) * limit;
const endIndex = startIndex + limit;
req.pagination = { page, limit, startIndex, endIndex };
next();
});
// 获取用户列表的API
app.get('/api/users', (req, res) => {
const { startIndex, endIndex } = req.pagination;
const users = db.users.slice(startIndex, endIndex);
res.json(users);
});
// 用户登录API,生成JWT
app.post('/api/login', (req, res) => {
const { username, password } = req.body;
// 这里应该是用户验证的逻辑,假设用户名和密码都是'user1'
if (username === 'user1' && password === 'user1') {
const token = jwt.sign({ userId: 1 }, secretKey, { expiresIn: '1h' });
res.json({ token });
} else {
res.status(401).send('Invalid username or password');
}
});
// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
这段代码实现了一个简单的Node.js服务器,包括JWT鉴权和分页处理的功能。在实际应用中,你需要替换掉硬编码的用户信息和密钥,并且添加用户注册接口,以及更复杂的鉴权逻辑和数据库查询。
猜你喜欢
- 2024-12-17 JS:作为前端,你确定你会加、减、乘、除吗?(有坑)
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)