zoukankan      html  css  js  c++  java
  • 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'));

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

  • 相关阅读:
    python字典练习2
    python字典小例子1
    尚硅谷linux学习笔记(待更新)3
    python字典 更新
    尚硅谷linux学习笔记(待更新)
    thymeleaf 无法正常解析页面(本地可以正常访问某个请求,并可以返回页面,但服务端访问出现找不到模板)
    thymeleaf关于Map的取值
    python练习——列表练习1
    如何在thymeleaf和freemarker的url中绑定传递的参数
    使用js获取项目url地址
  • 原文地址:https://www.cnblogs.com/baiyygynui/p/12031448.html
Copyright © 2011-2022 走看看