Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我希望能够得到产品的类别,类别和型号或只是得到所有的产品。目前正在为此使用3个不同的端点_Javascript_Node.js_Express - Fatal编程技术网

Javascript 我希望能够得到产品的类别,类别和型号或只是得到所有的产品。目前正在为此使用3个不同的端点

Javascript 我希望能够得到产品的类别,类别和型号或只是得到所有的产品。目前正在为此使用3个不同的端点,javascript,node.js,express,Javascript,Node.js,Express,我的后端有3个端点,它们根据一些标准返回产品。我想知道是否应该重写逻辑并将其合并到单个端点/函数中。目前我的路线如下所示: router.get('/products', productController.getProducts); router.get('/products/:categoryId', productController.getProductsByCategory); router.get('/products/:model/:categoryId', productCont

我的后端有3个端点,它们根据一些标准返回产品。我想知道是否应该重写逻辑并将其合并到单个端点/函数中。目前我的路线如下所示:

router.get('/products', productController.getProducts);
router.get('/products/:categoryId', productController.getProductsByCategory);
router.get('/products/:model/:categoryId', productController.getProductsByModelCategory);
我有3个功能非常相似,但也略有不同。我想知道我是否应该通过重写其中一个函数并完全删除另外两个函数来干燥代码。这将使函数在使用一些条件语句时更加复杂,但我将删除大量重复代码。另一方面,对于3个端点,很清楚每个端点都做了什么

module.exports.getProducts = async (req, res, next) => {
    let page = parseInt(req.query.page, 10)
    let limit = 10
    let offset = ( page - 1 ) * limit

    try {
        let products = await Product.findAndCountAll({
            limit: limit,
            offset: offset,
            order: [
                ['createdAt', 'DESC']
            ],
            include: [
                {
                    model: Model
                },
                {
                    model: Brand
                }
            ]
        })

        let pages = Math.ceil( products.count / limit )

        res.status(200).json({
            totalItems: products.count,
            totalPages: pages,
            products: products.rows
        })
    } catch (e) {
        console.log(e)
        res.status(500)
    }
}

module.exports.getProductsByCategory = async (req, res, next) => {
    let categoryId = req.params.categoryId
    let page = parseInt(req.query.page, 10)
    let limit = 10
    let offset = ( page - 1 ) * limit

    try {
        let products = await Product.findAndCountAll({
            limit: limit,
            offset: offset,
            where: {
                categoryId: categoryId
            }
        })

        let pages = Math.ceil( products.count / limit )

        res.status(200).json({
            totalItems: products.count,
            totalPages: pages,
            products: products.rows
        })
    } catch (e) {
        console.log(e)
        res.status(500)
    }
}

module.exports.getProductsByModelCategory = async (req, res, next) => {
    let model = req.params.model
    let categoryId = req.params.categoryId
    let page = parseInt(req.query.page, 10)
    let limit = 10
    let offset = ( page - 1 ) * limit

    try {
        let products = await Product.findAndCountAll({
            limit: limit,
            offset: offset,
            where: {
                categoryId: categoryId
            },
            include: {
                model: Model,
                where: {
                    name: model
                }
            }
        })

        let pages = Math.ceil( products.count / limit )

        res.status(200).json({
            totalItems: products.count,
            totalPages: pages,
            products: products.rows
        })
    } catch (e) {
        console.log(e)
        res.status(500)
    }
}

如果我在你的位置上,我有3个选择:

  • 在前面过滤

    从后端获取所有数据。然后在前端对其进行过滤

    这样你就不需要3条单独的路线;只要一条路就行了

  • 使用参数

    将查询作为参数传递到路由中,后跟
    。 您可以访问控制器中的参数,并使用
    开关
    大小写或任何类似的选项来根据参数显示结果。因此,只有一条路线

  • 你用过的那个


  • 既然你没有实际的问题,你最好把你的问题发到网上。这是一个很好的社区,人们愿意对你的代码给出反馈。