在没有 ORM 或 ODM 的情况下在 Nodejs 中创建模型

cod*_*sim 8 sql database-schema node.js express odm

我很惊讶为什么这么难找到。

我正在尝试使用适当的 sql 将我的整体架构转换为我的 Node Express 应用程序的 3 层架构。

存储库

在架构更改之前1 个文件entry.js 1 个具有业务逻辑的端点 具有原始 sql 的函数,在验证 res.body 对象后调用

  • 后端
    • 源代码
      • 服务
        • 服务1
      • 路线
        • service1Route [来自entry.js的路由处理/service1]
      • models -service1Model [包含sql函数,而不是模式]
  • Entry.js [主要快递应用程序]

使用的技术 - 使用 .js 而不是 .ts - Nodejs - Express -

约束 - 我无法使用 postgres 或 sequlize,因为它们不支持我正在使用的专有数据库。

假设

  • postgres 或 mongoose 拥有流行的 ORM 和 ODM,没有它们你就无法使用它们,因此开发人员(作为一个好的实践)被迫创建模型。
  • 现在我想通过这样的验证创建我自己的模型/模式。

  1. 如何在没有 ORM 或 ODM 的情况下创建模型。
  2. 模式和模型之间有区别吗?
  3. 在模型文件夹中编写 sql 函数:这是使用此架构模式的正确方法。
  4. 如果模式/模型是在模型文件夹中创建的,那么 sql 查询驻留在哪里?

我已经尝试过什么?

  1. 用于使用 res.body 对象中所需的键验证对象

Jim*_*son 1

我来尝试回答一下。我是一名数据库工程师,编写了无需使用 ORM 即可直接连接到数据库的 Node.js 应用程序。

1:只要您知道要存储在数据库中的数据的结构,您就可以编写一个 javascript 类,该类具有执行所有更新和类实例化等的方法。例如,您可以有一个user 类,带有构造函数和许多方法,用于在数据库中创建新用户、从数据库中检索用户、更新用户等。您可以在此处此处阅读有关 javascript 类的更多信息阅读有关 javascript 类的更多信息。

所以这里你的模型只是一个知道如何与数据库交互的类。

您可以将所有 SQL 存储在这里,但我建议您不要这样做,而应在数据库中使用存储过程。这样,如果您需要调整查询或进行更改,您可以仅更改存储过程,而无需创建应用程序的整个版本。您的 DBA 还可以为您修改 SP。

2:取决于你在这里指的是什么。数据库中的架构是功能、业务领域或整个应用程序的容器。就像在企业中一样,您可以有一个销售模式和一个营销模式,或者您可以将所有应用程序逻辑存储在 MySalesApp 模式中。

JavaScript 模型是一项特定的功能及其与数据库的交互。就像用户、人或动物等。在数据库中,所有这些对象(可能会有一个人/用户/动物表,以及许多用于更新、创建等的存储过程)都将存储在里面一个模式。在 MySQL 中,模式也可以是整个数据库。

3:你可以在那里存储你的SQL。但出于前面提到的原因,我会使用存储过程来执行此操作。基本上是因为您可以调整它们以提高效率,而无需重新部署整个应用程序。

4:这也是通过使用存储过程来回答的。因此,您不再需要一堆创建用户的代码,而是拥有一个位于数据库中并为您处理所有事务的 SP。然后您最终会调用一个存储过程,如下所示:

var query = "BB.sp_CreateUser";

var params = [
    parseInt(user.userId),
    user.firstName,
    user.surname,
    user.userInitials,
    user.telephone,
    user.username,
    user.password
];

let result = await database.asyncQueryDynamic(query, params);
Run Code Online (Sandbox Code Playgroud)

我在这里进行了一些抽象,因为我正在使用连接池等。但是您可以在此处阅读有关使用存储过程的更多信息。