#3 added generic controller that takes different models

parent 35c835d2
import {Request, Response} from 'express';
import {Model} from 'mongoose';
const create = (model: Model<any>) => (req: Request, res: Response) => {
console.log(`Create new document for ${model.modelName}`);
const doc = new model({
...req.body,
});
return doc
.save()
.then((result: any) => res.status(201).send(result))
.catch((error: any) => res.status(500).json({error}));
};
const getAll = (model: Model<any>) => (req: Request, res: Response) => {
console.log(`Getting all documents for ${model.modelName}`);
model
.find<Document>({}, {description: 0})
.then((results) => {
console.log(results);
return res.status(200).send(results);
})
.catch((error) => {
console.log(error);
return res.status(500).json({error});
});
};
export default {
create,
getAll,
};
...@@ -2,13 +2,14 @@ import express, {Express, json} from 'express'; ...@@ -2,13 +2,14 @@ import express, {Express, json} from 'express';
import 'dotenv/config'; import 'dotenv/config';
import cors from 'cors'; import cors from 'cors';
import {connect} from 'mongoose'; import {connect} from 'mongoose';
import categoryRouter from './routes/Category';
const app: Express = express(); const app: Express = express();
app.use(json()); app.use(json());
app.use(cors()); app.use(cors());
const run = async () => { const run = async () => {
await connect(`${process.env.MONGO_URL}/musicApp`); await connect(`${process.env.MONGO_URL}/office`);
}; };
run().catch((err) => console.log(err)); run().catch((err) => console.log(err));
...@@ -16,3 +17,5 @@ run().catch((err) => console.log(err)); ...@@ -16,3 +17,5 @@ run().catch((err) => console.log(err));
app.listen(process.env.PORT, () => { app.listen(process.env.PORT, () => {
console.log('Server started on port ' + process.env.PORT); console.log('Server started on port ' + process.env.PORT);
}); });
app.use('/categories', categoryRouter);
import mongoose, {Document, Schema} from 'mongoose';
export interface ICategory {
name: string;
description: string;
}
export interface ICategoryModel extends ICategory, Document {}
const CategorySchema: Schema = new Schema(
{
name: {
type: String,
required: true,
},
description: {
type: String,
},
},
{versionKey: false}
);
export default mongoose.model<ICategoryModel>('Category', CategorySchema);
import express, {Request, Response} from 'express'; import express, {Router} from 'express';
import {model, Schema, HydratedDocument, Types} from 'mongoose'; import controller from '../controllers/Generic';
import model from '../models/category';
const router = express.Router(); const router: Router = express.Router();
interface ICategory { router.get('/', controller.getAll(model));
name: string; router.post('/', controller.create(model));
description: string;
}
const Category = model<ICategory>( export = router;
'Category',
new Schema({
name: {
type: String,
required: true,
},
description: {
type: String,
required: false,
},
})
);
router.get('/', async (req: Request, res: Response) => {});
router.post('/', async (req: Request, res: Response) => {});
export {router as categoryRouter};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment