fix problem with multer

This commit is contained in:
Guillaume Dorce 2022-08-27 17:05:38 +02:00
parent e5ba280381
commit f8466fb261
5 changed files with 28 additions and 15 deletions

3
.gitignore vendored
View File

@ -26,4 +26,5 @@ dist-ssr
*.sqlite *.sqlite
*.db *.db
.env .env
.prisma/ .prisma/
public/uploads/

View File

@ -6,6 +6,7 @@ import deletePost from './deletePost';
import likePost from './likePost'; import likePost from './likePost';
import unlikePost from './unlikePost'; import unlikePost from './unlikePost';
import { verifyToken } from '@/controller/AuthController'; import { verifyToken } from '@/controller/AuthController';
import { upload } from '@/controller/FileController';
const posts = Router(); const posts = Router();
@ -17,7 +18,7 @@ const getToken = (req: Request): string | undefined => {
const checkAuth = (req: Request, res: Response, next: NextFunction) => { const checkAuth = (req: Request, res: Response, next: NextFunction) => {
const token = getToken(req); const token = getToken(req);
if (token === undefined) { if (token === undefined) {
return res.status(401).send('No token provided'); return res.status(401).send({ error: 'No token provided' });
} }
return verifyToken(token) return verifyToken(token)
.then((decodedToken: number) => { .then((decodedToken: number) => {
@ -25,15 +26,15 @@ const checkAuth = (req: Request, res: Response, next: NextFunction) => {
next(); next();
}) })
.catch((error) => { .catch((error) => {
return res.status(401).send(error); return res.status(401).send({ error });
}); });
}; };
posts.use(checkAuth); posts.use(checkAuth);
posts.get('/', getPosts); posts.get('/', getPosts);
posts.post('/new', newPost); posts.post('/new', upload.single('image'), newPost);
posts.put('/edit/:id', putPost); posts.put('/edit/:id', upload.single('image'), putPost);
posts.delete('/delete/:id', deletePost); posts.delete('/delete/:id', deletePost);
posts.put('/like/:id', likePost); posts.put('/like/:id', likePost);
posts.put('/unlike/:id', unlikePost); posts.put('/unlike/:id', unlikePost);

View File

@ -32,20 +32,20 @@ const genToken = (userId: number) => {
}); });
}; };
const verifyToken = async (token: string): Promise<number> => { const verifyToken = (token: string): Promise<number> => {
const prismaToken = await prisma.token.findUnique({
where: { token },
});
if (prismaToken === null) {
throw 'Token not found';
}
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
jwt.verify(token, config.JWT_SECRET, (err?, decoded?: jwt.JwtPayload | string) => { jwt.verify(token, config.JWT_SECRET, async (err?, decoded?: jwt.JwtPayload | string) => {
if (err) { if (err) {
reject(err); reject('Unkown error');
} else if (decoded === undefined || typeof decoded === 'string' || decoded.id === undefined) { } else if (decoded === undefined || typeof decoded === 'string' || decoded.id === undefined) {
reject('Invalid token'); reject('Invalid token');
} else { } else {
const prismaToken = await prisma.token.findUnique({
where: { token },
});
if (prismaToken === null) {
throw 'Token not found';
}
const decodedToken: number = decoded.id; const decodedToken: number = decoded.id;
resolve(decodedToken); resolve(decodedToken);
} }

View File

@ -0,0 +1,11 @@
import multer from 'multer';
import path from 'path';
const storage = multer.diskStorage({
destination: path.join(__dirname, '../../public/uploads'),
filename: (req, file, cb) => {
cb(null, file.originalname);
},
});
export const upload = multer({ storage });

View File

@ -37,8 +37,8 @@ const checkExpiredTokenTimer = ms(process.env.CHECK_EXPIRED_TOKEN_EVERY || '60s'
const app = express(); const app = express();
app.use(cors()); app.use(cors());
app.use(json({ limit: '50mb' }));
app.use(urlencoded({ extended: true, limit: '50mb' })); app.use(urlencoded({ extended: true, limit: '50mb' }));
app.use(json());
app.use('/api', api); app.use('/api', api);