app.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * @Author: weisheng
  3. * @Date: 2023-04-18 21:48:30
  4. * @LastEditTime: 2023-04-19 16:42:21
  5. * @LastEditors: weisheng
  6. * @Description:
  7. * @FilePath: \uniapp-vue3-fant-ts\koa-mock\app.js
  8. * 记得注释
  9. */
  10. const Koa = require('koa')
  11. const Router = require("koa-router");
  12. const app = new Koa()
  13. const json = require('koa-json')
  14. const onerror = require('koa-onerror')
  15. const bodyparser = require('koa-bodyparser')
  16. const logger = require('koa-logger')
  17. const glob = require("glob");
  18. const cors = require('@koa/cors');
  19. const fs = require("fs");
  20. // error handler
  21. onerror(app)
  22. // middlewares
  23. app.use(bodyparser({
  24. enableTypes:['json', 'form', 'text']
  25. }))
  26. app.use(json())
  27. app.use(logger())
  28. app.use(require('koa-static')(__dirname + '/public'))
  29. // logger
  30. app.use(async (ctx, next) => {
  31. const start = new Date()
  32. await next()
  33. const ms = new Date() - start
  34. console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
  35. })
  36. app.use(cors());
  37. const router = new Router({ prefix: "/api" });
  38. const routerMap = {}; // 存放 文件路径与路由 的 映射
  39. let content = '' // api/list 目录
  40. glob.sync('./api/**/*.json').forEach((item, i) => {
  41. let apiJsonPath = item && (item.replace(/\\/g, '/')).split("api")[1];
  42. let apiPath = apiJsonPath.replace(".json", "");
  43. content += apiPath + '\n'
  44. router.get('/list', (ctx, next)=> { // => /api/list/
  45. ctx.body = content
  46. })
  47. router.get(apiPath, (ctx, next) => {
  48. try {
  49. let jsonStr = fs.readFileSync(item).toString();
  50. ctx.body = {
  51. data: JSON.parse(jsonStr),
  52. code: 2000,
  53. success: true,
  54. msg:'成功了'
  55. };
  56. } catch (err) {
  57. ctx.body = {
  58. status: 404,
  59. type: "false"
  60. };
  61. ctx.throw("服务器错误: ", 500);
  62. }
  63. });
  64. router.post(apiPath, async (ctx, next) => {
  65. try {
  66. let jsonStr = fs.readFileSync(item).toString();
  67. await new Promise(resolve => setTimeout(resolve, 500));
  68. ctx.body = {
  69. data: JSON.parse(jsonStr),
  70. code: 2000,
  71. success: true,
  72. msg:'成功了'
  73. };
  74. } catch (err) {
  75. ctx.body = {
  76. status: 404,
  77. type: "false"
  78. };
  79. ctx.throw("服务器错误: ", 500);
  80. }
  81. });
  82. routerMap[apiJsonPath] = apiPath;
  83. })
  84. // routes
  85. app.use(router.routes()).use(router.allowedMethods());
  86. // app.use(index.routes(), index.allowedMethods())
  87. // app.use(users.routes(), users.allowedMethods())
  88. // error-handling
  89. app.on('error', (err, ctx) => {
  90. console.error('server error', err, ctx)
  91. });
  92. module.exports = app