node.js实现分页和jwt鉴权机制

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鉴权和分页处理的功能。在实际应用中,你需要替换掉硬编码的用户信息和密钥,并且添加用户注册接口,以及更复杂的鉴权逻辑和数据库查询。

相关推荐
helpme流水5 小时前
使用秘钥登录服务器
运维·服务器·github
uhakadotcom6 小时前
Bun相比npm包管理工具有啥优点?
前端·架构·github
油泼辣子多加11 小时前
2024年12月11日Github流行趋势
github
saku16 小时前
Sora 终于发布,但已经不再期待了
人工智能·github
留白199220 小时前
GitHub问题整理
github
MoonBit月兔21 小时前
GitHub 正式收录 MoonBit 作为一门通用编程语言!核心用户突破三万!
开发语言·github·编程语言·moonbit
Ztiddler1 天前
【CMD、PowerShell和Bash设置代理】
开发语言·深度学习·github·bash·powershell·代理·cmd
江梦寻1 天前
GitHub、Google等镜像加速地址收集
前端·后端·编辑器·gitlab·github·gitcode
007php0071 天前
php项目的sdk封装成composer包的创建与发版
运维·开发语言·nginx·golang·github·php·composer
007php0071 天前
go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用
开发语言·后端·python·gpt·阿里云·golang·github