When we try to do MongoDB opration, mongoose return Promise, we can use async/await to simply the code:
const mongoose = require('mongoose');
const Store = mongoose.model('Store');
exports.createStore = async (req, res) => {
const store = new Store(req.body);
await store.save();
res.redirect('/');
};
The problme here is no error handling, we can use try catch, there is another approach is function composion.
We can define a high order function:
exports.catchErrors = (fn) => { return function(req, res, next) { return fn(req, res, next).catch(next); }; };
We just need to wrap express router:
router.post('/add', catchErrors(storeCtrl.createStore));
So the following middlewares can handle those error later.