koa配置swagger 接口有返回数据 增删改查示例
时间: 2024-05-15 22:19:58 浏览: 93
SSH实例,实现增删改查
5星 · 资源好评率100%
以下是一个koa配置swagger接口的示例,包含增删改查操作:
```javascript
const Koa = require('koa');
const Router = require('koa-router');
const swagger = require('swagger2');
const { validate } = require('swagger2-koa');
const bodyparser = require('koa-bodyparser');
const app = new Koa();
const router = new Router();
const spec = swagger.loadDocumentSync('./swagger.yaml');
if (!swagger.validateDocument(spec)) {
throw Error(`./swagger.yaml does not conform to the Swagger 2.0 schema`);
}
router.get('/users', async (ctx) => {
// 查询用户列表
const users = await User.find();
ctx.status = 200;
ctx.body = { users };
});
router.get('/users/:id', async (ctx) => {
// 查询单个用户
const user = await User.findById(ctx.params.id);
if (!user) {
ctx.status = 404;
ctx.body = { error: 'User not found' };
} else {
ctx.status = 200;
ctx.body = { user };
}
});
router.post('/users', async (ctx) => {
// 创建用户
const user = await User.create(ctx.request.body);
ctx.status = 201;
ctx.body = { user };
});
router.put('/users/:id', async (ctx) => {
// 更新用户
const user = await User.findByIdAndUpdate(ctx.params.id, ctx.request.body, { new: true });
if (!user) {
ctx.status = 404;
ctx.body = { error: 'User not found' };
} else {
ctx.status = 200;
ctx.body = { user };
}
});
router.delete('/users/:id', async (ctx) => {
// 删除用户
const user = await User.findByIdAndDelete(ctx.params.id);
if (!user) {
ctx.status = 404;
ctx.body = { error: 'User not found' };
} else {
ctx.status = 204;
}
});
app.use(bodyparser());
app.use(validate(spec));
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
```
以上示例中,我们通过koa-router来定义了5个接口:
- 查询用户列表:GET /users
- 查询单个用户:GET /users/:id
- 创建用户:POST /users
- 更新用户:PUT /users/:id
- 删除用户:DELETE /users/:id
在每个接口的处理函数中,我们使用了Mongoose来进行数据库操作。返回的数据都被包装在了一个对象中,以符合Swagger规范。
为了让这些接口符合Swagger规范,我们使用了swagger2-koa中间件来校验请求和响应的数据格式。同时,我们也编写了一个swagger.yaml文件来对接口进行定义和描述。
阅读全文