欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > node.js实现分页和jwt鉴权机制

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

2025/5/1 21:29:55 来源:https://blog.csdn.net/Rverdoser/article/details/144271549  浏览:    关键词: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鉴权和分页处理的功能。在实际应用中,你需要替换掉硬编码的用户信息和密钥,并且添加用户注册接口,以及更复杂的鉴权逻辑和数据库查询。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词