【问题标题】:Which approach is more elegant in express.js api routers?express.js api 路由器中哪种方法更优雅?
【发布时间】:2021-02-13 17:42:45
【问题描述】:

我正在使用 express 和 mongoDB 进行一些练习,当我定义 API 路由时,我意识到互联网上的人们使用第一种方法。但我认为第二个更容易阅读,尤其是对于更大的数据。我想知道它们之间是否存在差异或安全问题。提前致谢。

    // first approach
    router.route("/add").post((req, res) => {
      const email = req.body.email;
      const password = req.body.password;
      const displayName = req.body.displayName;
      const newUser = new User({ email, password, displayName });
      newUser
        .save()
        .then(() => res.json("OK"))
        .catch((err) => {
          res.status(400).json(err);
        });
    });
    
    // second approach
    router.route("/add").post((req, res) => {
      const newUser = new User({ ...req.body });
      newUser
        .save()
        .then(() => res.json("OK"))
        .catch((err) => {
          res.status(400).json(err);
        });
    });

【问题讨论】:

    标签: node.js mongodb api express


    【解决方案1】:

    当您使用 mongoose 时,基于 mongoose documentation,默认情况下,文档 (req.body) 在保存到数据库之前会自动验证(基于架构)。

    这是为了防止保存无效文档,所以第二种方法没有安全问题,而且更容易阅读,所以可以使用第二种方法

    【讨论】:

      【解决方案2】:

      从安全的角度来看,它们是相同的。

      在我看来,第一种方法更好,一些实际的原因:

      • 其他开发人员更容易看到您保存的数据
      • 您可能希望在保存数据之前对其进行处理
      • 有助于保持代码的一致性(与需要变量的结构相同)

      您可以使用ES6 destructuring assignment 语法简化声明。

      发件人:

      const email = req.body.email;
      const password = req.body.password;
      const displayName = req.body.displayName;
      

      收件人:

      const { email, password, displayName } = req.body;
      

      另外,请查看Clean Code JavaScript,它可能会帮助您做出决定。

      【讨论】:

        猜你喜欢
        • 2015-12-12
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-27
        • 2018-03-03
        • 2015-08-28
        相关资源
        最近更新 更多