diff --git a/package.json b/package.json index 538f43f..27f7fdd 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@types/jsonwebtoken": "^8.5.4", "@types/node": "^16.4.1", "@types/tough-cookie": "^4.0.1", + "@types/validator": "^13.6.3", "axios": "^0.21.1", "axios-cookiejar-support": "^1.0.1", "cors": "^2.8.5", @@ -31,6 +32,7 @@ "reflect-metadata": "^0.1.13", "tough-cookie": "^4.0.0", "ts-node": "^10.1.0", - "typedi": "^0.10.0" + "typedi": "^0.10.0", + "validator": "^13.6.0" } } diff --git a/src/index.ts b/src/index.ts index b79a527..5092f2a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,6 +7,7 @@ import {getPoolCreatingPromise} from "./includes" import expressJWT from 'express-jwt' import type {ErrorRequestHandler} from "express" import {IResultJson} from "./types" +import {postRouter} from "./routers/post-router" const app = express() @@ -19,9 +20,9 @@ app.use( ) const authErrorHandler: ErrorRequestHandler = (err, - req - , res - , next) => { + req, + res, + next) => { if (err.name == 'UnauthorizedError') { res.status(401).send({status: false, data: '使用者未登入'}) } @@ -29,6 +30,7 @@ const authErrorHandler: ErrorRequestHandler = app.use(authErrorHandler) app.use('/user', userRouter) +app.use('/post',postRouter) async function entrypoint() { await getPoolCreatingPromise() diff --git a/src/models/post-model.ts b/src/models/post-model.ts new file mode 100644 index 0000000..6766568 --- /dev/null +++ b/src/models/post-model.ts @@ -0,0 +1,7 @@ +import 'reflect-metadata' +import {Service} from "typedi" + +@Service() +export class PostModel{ + +} diff --git a/src/models/user-model.ts b/src/models/user-model.ts index 8aaf6e5..252ab21 100644 --- a/src/models/user-model.ts +++ b/src/models/user-model.ts @@ -24,4 +24,17 @@ export class UserModel { role: user[0].role } } + + async findUserById(id: number) { + let user = await db.query('select * from users where id=?', [id]) + if (!user.length) { + return null + } + return { + id: user[0].id, + username: user[0].username, + realName: user[0].realName, + role: user[0].role + } + } } diff --git a/src/routers/post-router.ts b/src/routers/post-router.ts new file mode 100644 index 0000000..487f3b1 --- /dev/null +++ b/src/routers/post-router.ts @@ -0,0 +1,34 @@ +import 'reflect-metadata' +import {Container} from "typedi" +import {PostService} from "../services/post-service" +import express from "express" +import {body} from "express-validator" +import * as Validator from "validator" +import {hasValidationErrors} from "../includes" + +let postService = Container.get(PostService) + +let postRouter = express.Router() +postRouter.post('/submit', + body('content').notEmpty().withMessage('请输入内容') + .escape(), + body('image').isJSON().withMessage('图片必须为JSON格式').bail().custom((input, {req}) => { + let arr: string[] = JSON.parse(input) + if(!arr.length){ + throw new Error('图片数量至少为1') + } + for (let url of arr) { + if (!Validator.default.isURL(url, {host_whitelist: [/.*\.360buyimg\.com/]})) { + throw new Error('必须是360buyimg.com下的图片') + } + } + req.body.imageArr = arr + return true + }), + (req: express.Request, res: express.Response) => { + if (hasValidationErrors(req, res)) return + res.json(postService.submit(req.body.content, req.body.imageArr)) + } +) + +export {postRouter} diff --git a/src/services/post-service.ts b/src/services/post-service.ts new file mode 100644 index 0000000..ddfaa79 --- /dev/null +++ b/src/services/post-service.ts @@ -0,0 +1,10 @@ +import 'reflect-metadata' +import {Service} from "typedi" + +@Service() +export class PostService { + async submit(content: string, imageArr: string[]) { + console.log(content) + console.log(imageArr) + } +} diff --git a/src/services/user-service.ts b/src/services/user-service.ts index 97d5b11..e892d3c 100644 --- a/src/services/user-service.ts +++ b/src/services/user-service.ts @@ -50,10 +50,8 @@ export class UserService { return resultJson.success(token) } - async me(user: JWTUserPayload) { - return resultJson.success({ - id: user.id, - role: user.role - }) + async me(jwtUserPayload: JWTUserPayload) { + let user=await this.userModel.findUserById(jwtUserPayload.id) + return resultJson.success(user) } }