index.mjs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import Router from '@koa/router';
  2. import { koaBody } from 'koa-body';
  3. import { copyFile, rm, access, mkdir } from 'node:fs/promises';
  4. import { UPLOAD_DIR, STATIC } from '../app.config.mjs';
  5. const router = new Router();
  6. // 通过router实例的一些方法 比如 get、post等去定义 对应请求方法的路由
  7. router
  8. .post('/login', async (ctx) => {
  9. const { username, password } = ctx.request.body;
  10. let sql = `SELECT * FROM Users WHERE username = ? AND password = ?;`;
  11. let res = await ctx.execute(sql, [username, password]);
  12. if (res.length > 0) {
  13. // 如果认证成功
  14. // 1 制作token
  15. // 2 将token值和登录用户信息 一同响应给客户端
  16. } else {
  17. ctx.body = {
  18. code: 1,
  19. message: '用户名或密码不正确',
  20. };
  21. }
  22. })
  23. .get('/', async (ctx) => {
  24. let res = await ctx.execute('select * from users;');
  25. ctx.body =
  26. res === false
  27. ? {
  28. code: 1,
  29. msg: '失败',
  30. }
  31. : {
  32. code: 0,
  33. msg: '成功',
  34. data: res,
  35. };
  36. })
  37. .put(
  38. '/upload',
  39. koaBody({
  40. multipart: true,
  41. formidable: {
  42. keepExtensions: true,
  43. uploadDir: UPLOAD_DIR, // 设置上传文件的最终位置
  44. },
  45. onError(err, ctx) {
  46. ctx.body = {
  47. code: 1,
  48. msg: err,
  49. };
  50. },
  51. }),
  52. async (ctx) => {
  53. let filename = ctx.request.files.file.newFilename;
  54. let srcFile = `./${UPLOAD_DIR}/${filename}`;
  55. let destFile = srcFile;
  56. // 获取 请求体 中 除了file文件之外的其他数据
  57. const { folder } = ctx.request.body;
  58. // 如果用户在上传文件时 指定了目标文件夹
  59. if (folder) {
  60. // 1 将默认上传位置的文件 拷贝到 目标的文件夹下
  61. destFile = `./${UPLOAD_DIR}/${folder}/${filename}`;
  62. try {
  63. // 先确保destFile的文件夹都真实存在
  64. let isExist = await access(`./${UPLOAD_DIR}/${folder}`).catch(
  65. () => false
  66. );
  67. // isExist 就是 undefined 或者 false
  68. if (isExist == false) {
  69. // 如果不存在 就创建
  70. await mkdir(`./${UPLOAD_DIR}/${folder}`, { recursive: true });
  71. }
  72. await copyFile(srcFile, destFile);
  73. // 2 成功后 删除默认位置的文件
  74. await rm(srcFile);
  75. } catch (error) {
  76. console.error(error);
  77. }
  78. }
  79. // 给客户端响应数据
  80. ctx.body = {
  81. code: 0,
  82. data: {
  83. path: `${UPLOAD_DIR.replace(STATIC, '')}/${folder}/${filename}`,
  84. filename,
  85. },
  86. msg: '上传成功',
  87. };
  88. }
  89. );
  90. export default router;