NodeJS-快速+猫鼬+ BAL单连接

时间:2019-03-14 21:09:14

标签: node.js express mongoose

我是NodeJS的新手,并且使用express设置了一个新的mongoose应用程序,并且我已经阅读了很多有关如何在此应用程序中管理数据库连接的知识。

我了解到最佳实践是建立与app.locals实例的express的连接,这很好,但是我的代码看起来很难维护和复杂。

在每个端点中,我需要插入第一行:

 const db = req.app.locals.db;

代码如下:

const create = async (req, res) => {
    const db = req.app.locals.db;

    const sysUserModel = {
        email: req.body.email,
        password: req.body.password,
        firstName: req.body.firstName,
        lastName: req.body.lastName,
    };

    const model = new db.models.sys_user(sysUserModel);
    const sysUser = await model.save();

    res.json({
        status: true,
        data: sysUser
    });
};

我想添加一个带有服务的业务访问层,以重构我的代码并防止代码中的解耦,但是我找不到任何有关Express App单一连接以及如何添加使用该应用程序的服务的文章或博客文章。最佳实践。

我考虑过每次将db连接传递到某个服务类时,但是又很难维护。

您如何建议解决此问题?

谢谢。

1 个答案:

答案 0 :(得分:0)

您不需要直接使用db对象通过mongoose访问数据库。您只需要访问模型。 因此,只需为模型创建一个单独的目录,即可将所有模型导入该目录内的索引文件中。现在,只要您想访问数据库,就只需要在models文件夹中并从那里访问数据库。

文件结构可以像这样:-

models/
  user.js // user model
  post.js // post model
  comment.js  // comment model
  index.js

index.js文件可能看起来像这样

module.exports = {
 User: require("./user"),
 Post: require("./post"),
 Comment: require("./comment")
}

您要访问数据库的文件可能如下所示

const db = require(".../models");

const create = async (req, res) => {

    const sysUserModel = {
        email: req.body.email,
        password: req.body.password,
        firstName: req.body.firstName,
        lastName: req.body.lastName,
    };

    const user = new db.User(sysUserModel);
    const sysUser = await user.save();

    res.json({
        status: true,
        data: sysUser
    });
};