• express 将 Router 实例模块化


    为了更好的组织代码,将 Router 实例进行模块化,将 get / post 等快捷方式放在Router上,而不是 App 上,然后将该 Router 作为中间件,use 到 server.js 上。

    如果像这样写:

      productModule.post("/modules", (req, res) => {
        res.send("");
    });
    
    productModule.get("/modules/:id", (req, res) => {
        res.send("");
    });

    fruitRouter 实例写的会比较重复,这是个不好的做法,可能会因为输入错误而导致一些不必要的错误,可以通过下面的方法可以有效的避免重复录入:

    1. 使用 Router 的实例方法链式连接 get  / post 等
    2. 在特定的路由上安装中间件

    将 route('/modules') 的方法写在一起

    productModule.route('/modules')
        // get
        .get((req, res) => {
            productModel.find().then(module => {
                res.json(module);
            }).catch(err => {
                res.status(500).json({ message: err.message })
            });
        })
        // add
        .post((req, res) => {
            productModel.findOne({ moduleName: req.body.moduleName }).then((module) => {
                if (module) {
                    return res.status(500).json({ moduleName: "moduleName 巳存在!" });
                } else {
                    const moduleName = req.body.moduleName;
                    const moduleClassName = req.body.moduleClassName;
    
                    const newModule = new productModel({
                        moduleName,
                        moduleClassName
                    });
    
                    newModule.save().then(module => res.json(module)).catch(err => console.log(err));
                }
            })
        })

    将参数为 id 的另一个 route('/modules/:id') 写在一起

    productModule.route('/modules/:id')
        // update
        .post((req, res) => {
            const _id = `${req.params.id}`;
            const updateData = req.body;
    
            productModel.findByIdAndUpdate({ _id }, updateData, (err, module) => {
                if (err) {
                    res.status(500).json({ error: err });
                } else {
                    res.status(200).json(module)
                }
            })
        })
        // delete
        .delete((req, res) => {
            var id = `${req.params.id}`;
            console.log(id)
            productModel.findById({ _id: id }).then((id) => {
                if (id) {
                    productModel.deleteOne({ _id: id }).then(module => res.status(200).json(module));
                } else {
                    return res.status(400).json({ "_id": "id不存在" })
                }
            }).catch(err => {
                console.log(err)
            })
        })

    最后,将这个 Router 安装在 app

    app.use('/api/product', require('./routes/api/productModule'));

    以上这种模块化的路由是比较安全的做法,而且,在页面上不会看起来太乱。

  • 相关阅读:
    Poj 3287 Catch That Cow(BFS)
    Poj 1321 棋盘问题(搜索)
    Poj 2488 A Knight's Journey(搜索)
    解决ListView 缓存机制带来的显示不正常问题
    Poj 1631 Bridging signals(二分+DP 解 LIS)
    字符串相似度的几种衡量标准
    linux环回文件
    [转] CentOS---网络配置详解
    Dockerfile学习(二)
    Dockerfile学习(一)
  • 原文地址:https://www.cnblogs.com/baiyygynui/p/12031448.html
Copyright © 2020-2023  润新知