我正在用 Node.js 撰寫一個電子商務網站。
我注意到在創建路線時重復了一些代碼,但我找不到如何擺脫它。
男子路線如下:
router.get(`/parent-category-selection`,(req, res, next) => {
categoryRequest.getAllParentCategories('mens', (error, data) => {
if(!error){
res.render('category/parentCategorySelection', {parentCategories:data});
}else {
res.render('error', {message:'An error occured.'})
}
})
})
女性路線如下:
router.get(`/parent-category-selection`,(req, res, next) => {
categoryRequest.getAllParentCategories('womens', (error, data) => {
if(!error){
res.render('category/parentCategorySelection', {parentCategories:data});
}else {
res.render('error', {message:'An error occured.'})
}
})
})
app.js 中的路由:
app.use('/', indexRouter);
app.use('/men', menRouter)
app.use('/women',womenRouter)
app.use('/product',productRouter)
我想要像/women/parent-category-selection和/men/parent-category-selection這樣的路線而沒有代碼重復。正如您在上面看到的那樣,我如何實作這一點路由器功能非常相似,我應該找到一種將性別資訊系結到路由器的方法,例如 app.use('/:gender', genderRouter {gender:gender})。有什么幫助嗎?
uj5u.com熱心網友回復:
您可以使用的一種模式是高階函式,它是一個回傳函式的函式。在這種情況下,它用于創建快速中間件功能。例如:
const parentCategorySelectionHandler = (gender) => (req, res) =>
categoryRequest.getAllParentCategories(gender, (error, data) => {
if (!error) {
res.render("category/parentCategorySelection", {
parentCategories: data,
});
} else {
res.render("error", { message: "An error occured." });
}
});
可以這樣使用:
router.get(`/parent-category-selection`, parentCategorySelectionHandler("men"));
如果您想按照您的建議從 URL 中獲取性別,您可以將其更改為以下內容。
中間件
const parentCategorySelectionHandler = (req, res) =>
categoryRequest.getAllParentCategories(req.params.gender, (error, data) => {
if (!error) {
res.render("category/parentCategorySelection", {
parentCategories: data,
});
} else {
res.render("error", { message: "An error occured." });
}
});
用法
router.get(`/parent-category-selection/:gender`, parentCategorySelectionHandler);
然后,您需要更改在 app.js 中添加 men/women 路線的方式,因為這一條路線將涵蓋這兩種性別。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/440864.html
