From c528be50b781577349ab26bf363389db39fcbdfe Mon Sep 17 00:00:00 2001 From: xiaoxian521 <1923740402@qq.com> Date: Sun, 13 Nov 2022 19:24:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- package.json | 5 +- pnpm-lock.yaml | 167 +++++++++++++++++++++++++++++++++----------- src/config/index.ts | 2 +- src/router/http.ts | 78 ++++++++++++++------- src/server.ts | 19 ++--- src/utils/enums.ts | 2 + 7 files changed, 201 insertions(+), 76 deletions(-) diff --git a/.gitignore b/.gitignore index 13b6cd6..37f899e 100644 --- a/.gitignore +++ b/.gitignore @@ -81,4 +81,6 @@ dist .idea docs -.DS_Store \ No newline at end of file +.DS_Store +upload_tmp +public/images/ \ No newline at end of file diff --git a/package.json b/package.json index 006990f..364eaa9 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,12 @@ "author": "xiaoxian521", "license": "ISC", "devDependencies": { + "@pureadmin/utils": "^1.4.0", "@types/body-parser": "^1.19.2", "@types/express": "^4.17.14", "@types/express-ws": "^3.0.1", - "@types/formidable": "^2.0.5", "@types/jsonwebtoken": "^8.5.9", + "@types/multer": "^1.4.7", "@types/node": "^18.11.9", "@types/ws": "^8.5.3", "body-parser": "^1.20.1", @@ -22,8 +23,8 @@ "express": "^4.18.2", "express-swagger-generator": "^1.1.17", "express-ws": "^5.0.2", - "formidable": "^2.0.1", "jsonwebtoken": "^8.5.1", + "multer": "1.4.5-lts.1", "mysql2": "^2.3.3", "nodemon": "^2.0.20", "open": "^8.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0b55e58..18f1bc9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,11 +1,12 @@ lockfileVersion: 5.4 specifiers: + '@pureadmin/utils': ^1.4.0 '@types/body-parser': ^1.19.2 '@types/express': ^4.17.14 '@types/express-ws': ^3.0.1 - '@types/formidable': ^2.0.5 '@types/jsonwebtoken': ^8.5.9 + '@types/multer': ^1.4.7 '@types/node': ^18.11.9 '@types/ws': ^8.5.3 body-parser: ^1.20.1 @@ -15,8 +16,8 @@ specifiers: express: ^4.18.2 express-swagger-generator: ^1.1.17 express-ws: ^5.0.2 - formidable: ^2.0.1 jsonwebtoken: ^8.5.1 + multer: 1.4.5-lts.1 mysql2: ^2.3.3 nodemon: ^2.0.20 open: ^8.4.0 @@ -26,11 +27,12 @@ specifiers: winston: ^3.8.2 devDependencies: + '@pureadmin/utils': 1.4.0_dayjs@1.11.6 '@types/body-parser': 1.19.2 '@types/express': 4.17.14 '@types/express-ws': 3.0.1 - '@types/formidable': 2.0.5 '@types/jsonwebtoken': 8.5.9 + '@types/multer': 1.4.7 '@types/node': 18.11.9 '@types/ws': 8.5.3 body-parser: 1.20.1 @@ -40,8 +42,8 @@ devDependencies: express: 4.18.2 express-swagger-generator: 1.1.17 express-ws: 5.0.2_express@4.18.2 - formidable: 2.0.1 jsonwebtoken: 8.5.1 + multer: 1.4.5-lts.1 mysql2: 2.3.3 nodemon: 2.0.20 open: 8.4.0 @@ -127,6 +129,23 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /@pureadmin/utils/1.4.0_dayjs@1.11.6: + resolution: {integrity: sha512-xuy4/gPXoyUuTxxJGmyriXl8n4QGl9ya9Hh+deZvfhixlKHWyAz+ByJfwTb//B7b9Lpj/3sa53wTMC/oYgXAjQ==} + peerDependencies: + dayjs: '*' + echarts: '*' + vue: '*' + peerDependenciesMeta: + dayjs: + optional: true + echarts: + optional: true + vue: + optional: true + dependencies: + dayjs: 1.11.6 + dev: true + /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true @@ -181,12 +200,6 @@ packages: '@types/serve-static': 1.15.0 dev: true - /@types/formidable/2.0.5: - resolution: {integrity: sha512-uvMcdn/KK3maPOaVUAc3HEYbCEhjaGFwww4EsX6IJfWIJ1tzHtDHczuImH3GKdusPnAAmzB07St90uabZeCKPA==} - dependencies: - '@types/node': 18.11.9 - dev: true - /@types/jsonwebtoken/8.5.9: resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} dependencies: @@ -197,6 +210,12 @@ packages: resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true + /@types/multer/1.4.7: + resolution: {integrity: sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA==} + dependencies: + '@types/express': 4.17.14 + dev: true + /@types/node/18.11.9: resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} dev: true @@ -253,6 +272,10 @@ packages: picomatch: 2.3.1 dev: true + /append-field/1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + dev: true + /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -267,10 +290,6 @@ packages: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /asap/2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: true - /async/3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: true @@ -326,6 +345,13 @@ packages: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true + /busboy/1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: true + /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -402,6 +428,16 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true + /concat-stream/1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.7 + typedarray: 0.0.6 + dev: true + /content-disposition/0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -429,6 +465,10 @@ packages: requiresBuild: true dev: true + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -491,13 +531,6 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true - /dezalgo/1.0.3: - resolution: {integrity: sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==} - dependencies: - asap: 2.0.6 - wrappy: 1.0.2 - dev: true - /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -884,15 +917,6 @@ packages: resolution: {integrity: sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==} dev: true - /formidable/2.0.1: - resolution: {integrity: sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==} - dependencies: - dezalgo: 1.0.3 - hexoid: 1.0.0 - once: 1.4.0 - qs: 6.9.3 - dev: true - /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -972,11 +996,6 @@ packages: function-bind: 1.1.1 dev: true - /hexoid/1.0.0: - resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} - engines: {node: '>=8'} - dev: true - /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -1072,6 +1091,10 @@ packages: is-docker: 2.2.1 dev: true + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + /js-yaml/3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -1240,6 +1263,17 @@ packages: brace-expansion: 1.1.11 dev: true + /minimist/1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} + dev: true + + /mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + dependencies: + minimist: 1.2.7 + dev: true + /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true @@ -1248,6 +1282,19 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /multer/1.4.5-lts.1: + resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} + engines: {node: '>= 6.0.0'} + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 1.6.2 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + dev: true + /mysql2/2.3.3: resolution: {integrity: sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==} engines: {node: '>= 8.0'} @@ -1303,6 +1350,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + /object-inspect/1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} dev: true @@ -1375,6 +1427,10 @@ packages: engines: {node: '>=8.6'} dev: true + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + /proxy-addr/2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -1398,11 +1454,6 @@ packages: side-channel: 1.0.4 dev: true - /qs/6.9.3: - resolution: {integrity: sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==} - engines: {node: '>=0.6'} - dev: true - /range-parser/1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -1418,6 +1469,18 @@ packages: unpipe: 1.0.0 dev: true + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} @@ -1438,6 +1501,10 @@ packages: resolution: {integrity: sha512-SqfNKjjTw7Lq3E2S6P8L5Ac7YFD91mbkzWRlxrWK4tWioJRKDhe1+PtWS0X0hkQNEzZDpSish0TTXAVM4cRUzQ==} dev: true + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true @@ -1553,6 +1620,17 @@ packages: engines: {node: '>= 0.8'} dev: true + /streamsearch/1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: true + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + /string_decoder/1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: @@ -1677,6 +1755,10 @@ packages: mime-types: 2.1.35 dev: true + /typedarray/0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true + /typescript/4.8.4: resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} engines: {node: '>=4.2.0'} @@ -1758,6 +1840,11 @@ packages: optional: true dev: true + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + /yallist/2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} dev: true diff --git a/src/config/index.ts b/src/config/index.ts index 6ce9206..2b20412 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -40,7 +40,7 @@ export default { // app absolute path basedir: __dirname, // path to the API handle folder - files: ["../router/api/*.ts"], + files: ["../router/*.ts"], }, logs: { level: process.env.LOG_LEVEL || "silly", diff --git a/src/router/http.ts b/src/router/http.ts index e36dffa..822fd78 100644 --- a/src/router/http.ts +++ b/src/router/http.ts @@ -1,18 +1,18 @@ -import * as mysql from "mysql2"; +import * as fs from "fs"; import secret from "../config"; +import * as mysql from "mysql2"; import * as jwt from "jsonwebtoken"; import { createHash } from "crypto"; import Logger from "../loaders/logger"; import { Message } from "../utils/enums"; -import { Request, Response } from "express"; -// import { createMathExpr } from "svg-captcha"; import getFormatDate from "../utils/date"; import { connection } from "../utils/mysql"; -// import { formidable } from "formidable"; -// let path = require("path"); +import { Request, Response } from "express"; +import { createMathExpr } from "svg-captcha"; +const utils = require("@pureadmin/utils"); /** 保存验证码 */ -// let generateVerify: number; +let generateVerify: number; /** 过期时间 单位:毫秒 默认 1分钟过期,方便演示 */ let expiresIn = 60000; @@ -387,26 +387,56 @@ const searchVague = async (req: Request, res: Response) => { }); }; -// const upload = async (req: Request, res: Response) => {}; - // /** -// * @route GET /captcha -// * @summary 图形验证码 -// * @group captcha - 图形验证码 +// * @route POST /upload +// * @produces application/x-www-form-urlencoded +// * @consumes application/x-www-form-urlencoded +// * @summary 文件上传 +// * @group upload - 文件上传 // * @returns {object} 200 -// * @security JWT // */ -// const captcha = async (req: Request, res: Response) => { -// const create = createMathExpr({ -// mathMin: 1, -// mathMax: 4, -// mathOperator: "+", -// }); -// generateVerify = Number(create.text); -// res.type("svg"); // 响应的类型 -// res.json({ success: true, data: { text: create.text, svg: create.data } }); -// }; +const upload = async (req: Request, res: Response) => { + // 文件存放地址 + var des_file = "./public/images/" + req.files[0].originalname; + fs.readFile(req.files[0].path, function (err, data) { + fs.writeFile(des_file, data, function (err) { + if (err) { + res.json({ + success: false, + data: { message: Message[10] }, + }); + } else { + res.json({ + success: true, + data: { + message: Message[11], + filename: req.files[0].originalname, + filepath: utils.getAbsolutePath(des_file), + }, + }); + } + }); + }); +}; + +/** + * @route GET /captcha + * @summary 图形验证码 + * @group captcha - 图形验证码 + * @returns {object} 200 + */ + +const captcha = async (req: Request, res: Response) => { + const create = createMathExpr({ + mathMin: 1, + mathMax: 4, + mathOperator: "+", + }); + generateVerify = Number(create.text); + res.type("svg"); // 响应的类型 + res.json({ success: true, data: { text: create.text, svg: create.data } }); +}; export { login, @@ -415,6 +445,6 @@ export { deleteList, searchPage, searchVague, - // upload, - // captcha, + upload, + captcha, }; diff --git a/src/server.ts b/src/server.ts index e4bf49f..6cfe34e 100644 --- a/src/server.ts +++ b/src/server.ts @@ -2,6 +2,7 @@ import app from "./app"; // import * as open from "open"; import config from "./config"; import * as dayjs from "dayjs"; +import * as multer from "multer"; import { user } from "./models/mysql"; import Logger from "./loaders/logger"; import { queryTable } from "./utils/mysql"; @@ -17,8 +18,8 @@ import { deleteList, searchPage, searchVague, - // upload, - // captcha, + upload, + captcha, } from "./router/http"; app.post("/login", (req, res) => { @@ -45,13 +46,15 @@ app.post("/searchVague", (req, res) => { searchVague(req, res); }); -// app.post("/upload", (req, res) => { -// upload(req, res); -// }); +// 新建存放临时文件的文件夹 +const upload_tmp = multer({ dest: "upload_tmp/" }); +app.post("/upload", upload_tmp.any(), (req, res) => { + upload(req, res); +}); -// app.get("/captcha", (req, res) => { -// captcha(req, res); -// }); +app.get("/captcha", (req, res) => { + captcha(req, res); +}); app.ws("/socket", function (ws, req) { ws.send( diff --git a/src/utils/enums.ts b/src/utils/enums.ts index 6a0bb7e..8367628 100644 --- a/src/utils/enums.ts +++ b/src/utils/enums.ts @@ -10,4 +10,6 @@ export enum Message { "修改成功", "删除成功", "搜索信息不能为空", + "文件上传失败", + "文件上传成功", }