#javascript #node.js #mongodb #mongoose #routes
#javascript #node.js #mongodb #мангуст #маршруты
Вопрос:
Я заметил, что единственное, что меняется, — это Product.find({type:''})
в трех функциях, поэтому они все одинаковые…
могу ли я заставить одну функцию выполнять ту же работу?
routes.js файл :
mainRouter.get('/showChips',showChips);
mainRouter.get('/showJuices',showJuices);
mainRouter.get('/showSoftDrinks',showSoftDrinks);
controller.js файл :
const showChips = async (req,res)=>{
const chipsItems = await Product.find({type:'chips'});
console.log(chipsItems);
res.json(chipsItems)
};
const showJuices = async (req,res)=>{
const juicesItems = await Product.find({type:'juices'});
console.log(juicesItems);
res.json(juicesItems)
};
const showSoftDrinks = async (req,res)=>{
const softDrinksItems = await Product.find({type:'Soft Drinks'});
console.log(softDrinksItems);
res.json(softDrinksItems)
};
Ответ №1:
Вы можете создать функцию более высокого порядка, которая возвращает функцию .find
определенного типа:
const makeShowProduct = type => (req, res) => {
Product.find({ type })
.then(result => res.json(result))
.catch(handleErrors); // don't forget this part - don't create unhandled rejections
};
router
.get('/showChips', makeShowProduct('chips'))
.get('/showJuices', makeShowProduct('juices'))
.get('/showSoftDrinks', makeShowProduct('Soft Drinks'))
Комментарии:
1. почему это так? handleErrors не определен
2. Его реализация зависит от вас, но вам нужно что- то в
.catch
— необработанные отклонения устарели и приведут к завершению работы узла в новых версиях. Выясните, что вы хотите сделать, если обнаружена ошибка, и реализуйте это в функции.