Node.js/Express Routes代码重复问题



我正在用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)

我想要像/女性/父母类别选择/man/父母类别选择这样没有代码重复的路线。我该如何实现这一点,正如你所看到的,路由器的功能如此相似,我应该找到一种方法将性别信息绑定到类似路由器的应用程序上。use("/:gender",genderRouter{gend:gender}(。有什么帮助吗?

您可以使用的一种模式是高阶函数,它是一个返回函数的函数。在这种情况下,它用于创建一个express中间件功能。例如:

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中添加男性/女性路线的方式,因为这一条路线将涵盖这两种性别。

最新更新