网站首页 > 技术文章 正文
本帖最后由 小刀葛小伦 于 2019-12-26 16:56 编辑
思路一个接口请求包含了请求行, 请求头, 请求内容。 那我们就可以通过node解析一个请求然后对这个接口的内容进行匹配, 将符合接口请求的条件的数据返回去, 这样就像一个faker。 伪造了一个真正的接口会返回的数据, 从而达到和真正的接口一样的效果。
实现实现的功能:
1. 登录注册
2. 增删项目工程
3. 增删接口
4. 接口mock
技术栈: nextjs + koa + sqlite + sequelize
本项目总体不算复杂, 也可以给想学习上面技术的同学提供一个demo。
项目整体架构项目基于服务端渲染, 有两个页面: 首页和项目详情页。 我把node起的接口服务和服务端渲染框架nexjs起的服务放在了同一个端口。 也可以分开, 这里主要是不想再起一个服务了。
数据库使用的sqlite3, 它的好处是嵌入式,零配置, 超轻量级,数据以文件的形式存储, 不需要额外配置数据库了。 说白了, 就是方便, 当然也很好用。
数据库连接是通过ORM框架sequelize: (Object Relational Mapping)框架采用元数据来描述对象一关系映射细节, 这是个好东西啊, 对于不太懂SQL语言的前端同学简直是福音, 通过它我们就可以不用写SQL语句了, 只需要像js操作对象那样就能操作数据库了。
路由设计也很简单, 主要分为三种路由:
- 处理服务端页面渲染的路由,
- 处理页面请求的路由,
- 处理接口mock的路由。
//next页面api接口
router.post('/api/:page', async ctx => {
await routePost({ params: ctx.params.page, query: ctx.request.body }).then((res, err) => {
response(res, err, ctx)
})
})
router.get('/api/:page', async ctx => {
await routeGet({ params: ctx.params.page, query: ctx.request.query }).then((res, err) => {
response(res, err, ctx)
})
})
router.delete('/api/:page', async ctx => {
await routeDelete({ params: ctx.params.page, query: ctx.request.body }).then((res, err) => {
response(res, err, ctx)
})
})
//mock数据接口
router.all('/mock/:project_id/*', async ctx => {
const { method, body, url, header } = ctx.request
await routeMock({ params: ctx.params, body, method, url, header }).then((res, err) => {
response(res, err, ctx)
})
})
//next页面接口
app.prepare()
.then(() => {
// 首页
router.get('/', async ctx => {
await app.render(ctx.req, ctx.res, '/', ctx.query)
ctx.respond = false
})
// 项目
router.get('/project', async ctx => {
await app.render(ctx.req, ctx.res, `/project`, ctx.query)
ctx.respond = false
})
// 如果没有配置nginx做静态文件服务,下面代码请务必开启
router.get('*', async ctx => {
await handle(ctx.req, ctx.res)
ctx.respond = false
})
// 防止出现控制台报404错误
server.use(async (ctx, next) => {
ctx.res.statusCode = 200
await next()
})
server.use(router.routes()).use(router.allowedMethods())
server.listen(port, () => {
console.log(`> Ready on http://localhost:${port}`)
})
})
以url作为区分: api是页面请求, mock是接口mock请求, 别的是next页面渲染请求。 通过判断请求url进行不同的处理:
routeDelete: async ({ params, query }) => {
const { id } = query
switch (params) {
case 'project':
await api.deleteApi(id) //删除项目的同时清空对应的api接口
return await project.deleteOne(id).then(res => response(0, res)).catch(error => response(1, error.message))
case 'interface':
return await api.deleteOneApi(id).then(res => response(0, res)).catch(error => response(1, error.message))
default:
return '接口请求出错'
}
},
类似于上面这样, 具体的请参考源码。
项目整体流程新建项目(project_id)
->
新建接口(url, method, headers, body, data)
->
本地项目代理接口的域名
->
对创建的接口发起请求( http://host/mock/project_id/xxxxxx)
->
koa解析请求获取参数(url, method, body, headers)
->
通过路由判断请求参数匹配对应的接口
->
根据project_id去接口数据表里查找对应的数据并返回给本地项目
项目使用目前项目接口mock只支持返回json数据, 后续想添加返回数组,布尔值等其他数据格式。
使用:
- 可以通过线上地址创建自己的项目, 配置接口, 通过postman即可测试接口是否能使用。
- 可以通过clone源码本地跑服务, 同样可以通过postman或其他工具进行测试, 只需要将服务域名改成本地即可。
猜你喜欢
- 2025-07-08 如何优雅地校验后端接口数据,不做前端背锅侠
- 2025-07-08 Protobuf-net:C#高效序列化工具,助力接口传输与前端解析
- 2025-07-08 结合k8s和pipeline流水线,并通过k8s接口镜像升级
- 2025-07-08 前端开发如何用Mock.js进行数据接口模拟
- 2024-10-12 php 给app 或前端封装api 接口——json格式
- 2024-10-12 前端基础:vue中Axios的封装和API接口的管理
- 2024-10-12 Vue项目中实现用户登录及token验证
- 2024-10-12 前端开发:TypeScript 接口与泛型 接口使用泛型
- 2024-10-12 Java实战系列-前端VUE代码开发及接口流程设计(1)
- 2024-10-12 你还不了解typescript中接口和类型别名的用法区别?本文帮你总结
你 发表评论:
欢迎- 07-08记oracle日志挖掘实操&查询归档不正常增长情况(一)
- 07-08Oracle 伪列!这些隐藏用法你都知道吗?
- 07-08orcl数据库查询重复数据及删除重复数据方法
- 07-08重大故障!业务核心表被truncate删除,准备跑路……
- 07-08oracle数据恢复—oracle执行truncate命令误删除数据的数据恢复
- 07-08Oracle-rac 修改scanip(oracle 修改sequence cache)
- 07-08ORACLE RAC CDB和PDB切换(oracle数据库rac切换)
- 07-08Oracle rac haip作用(oracle rac的典型特征)
- 596℃几个Oracle空值处理函数 oracle处理null值的函数
- 590℃Oracle分析函数之Lag和Lead()使用
- 577℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 573℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 569℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 562℃【数据统计分析】详解Oracle分组函数之CUBE
- 549℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 542℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- 记oracle日志挖掘实操&查询归档不正常增长情况(一)
- Oracle 伪列!这些隐藏用法你都知道吗?
- orcl数据库查询重复数据及删除重复数据方法
- 重大故障!业务核心表被truncate删除,准备跑路……
- oracle数据恢复—oracle执行truncate命令误删除数据的数据恢复
- Oracle-rac 修改scanip(oracle 修改sequence cache)
- ORACLE RAC CDB和PDB切换(oracle数据库rac切换)
- Oracle rac haip作用(oracle rac的典型特征)
- 新手小白怎么学UI设计 推荐学习路线是什么
- 超实用!0基础UI设计自学指南(0基础学ui设计好就业吗)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- 前端获取当前时间 (50)
- 前端接口 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)