写一个node.js图书管理系统后端服务器(使用koa+json+jwt+token)
时间: 2023-08-03 11:04:52 浏览: 118
node koa jwt的后端基础框架
好的,以下是一个使用koa+json+jwt+token实现的简单图书管理系统后端服务器代码示例:
```javascript
const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const jwt = require('jsonwebtoken');
const app = new Koa();
const books = []; // 存储书籍信息
// JWT 密钥
const secret = 'mysecret';
// 用户信息
const users = [
{
username: 'admin',
password: 'admin'
}
];
// 登录接口
app.use(bodyParser());
app.use(async ctx => {
const { username, password } = ctx.request.body;
const user = users.find(u => u.username === username && u.password === password);
if (user) {
const token = jwt.sign({ username }, secret, { expiresIn: '1h' });
ctx.body = {
status: 'success',
message: '登录成功',
token
};
} else {
ctx.body = {
status: 'fail',
message: '用户名或密码错误'
};
}
});
// token 验证中间件
function authMiddleware(ctx, next) {
const { authorization } = ctx.request.headers;
if (authorization && authorization.startsWith('Bearer ')) {
const token = authorization.substring(7);
try {
const decoded = jwt.verify(token, secret);
ctx.state.user = decoded;
return next();
} catch (err) {
ctx.status = 401;
ctx.body = {
status: 'fail',
message: 'token已过期或无效'
};
}
} else {
ctx.status = 401;
ctx.body = {
status: 'fail',
message: '缺少Authorization头或格式不正确'
};
}
}
// 获取书籍列表
app.use(authMiddleware);
app.use(async ctx => {
ctx.body = {
status: 'success',
data: books
};
});
// 新增书籍
app.use(bodyParser());
app.use(authMiddleware);
app.use(async ctx => {
const { title, author } = ctx.request.body;
const book = { title, author };
books.push(book);
ctx.body = {
status: 'success',
message: '添加成功'
};
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
```
该代码实现了以下接口:
1. 登录接口 POST /login,用于验证用户身份并返回一个JWT token。
2. 获取书籍列表接口 GET /books,需要在请求头中带上JWT token。
3. 新增书籍接口 POST /books,需要在请求头中带上JWT token,并在请求体中带上title和author字段。
在使用该代码前,请确保安装了koa、koa-bodyparser和jsonwebtoken这三个依赖。另外,该代码中的用户信息和书籍信息都是存储在内存中的,实际应用中应该使用持久化存储。
阅读全文