环回远程方法中的自定义CRUD,用于除mongodb的模型以外的其他集合

时间:2019-07-09 10:18:12

标签: node.js mongodb loopbackjs loopback

我正在为我的项目使用Loopback。我为测试模型创建了一个“测试”模型和一个远程方法“ createOrder”。

'use strict';

module.exports = function (Test) {
    /**
     * 
     * @param {number} amount 
     * @param {Function(Error)} callback
     */

    Test.createOrder = function (amount, callback) {
        // Add log to the logs collection 
        callback(null);
    };
};

我正在使用MongoDB作为数据源。

{
  "db": {
    "name": "db",
    "connector": "memory"
  },
  "paymentDS": {
    "host": "localhost",
    "port": 27017,
    "url": "",
    "database": "test",
    "password": "",
    "name": "testDS",
    "user": "",
    "useNewUrlParser": true,
    "connector": "mongodb"
  }
}

我想从测试模型中定义的createOrder远程方法将日志插入日志收集中。 我该怎么办?

2 个答案:

答案 0 :(得分:2)

如果您有Logs集合的模型,则可以执行以下操作:

Lorem  ipsum  dolor  sit amet,
consectetur  adipiscing  elit.
Vestibulum    sagittis   dolor
mauris,  at  elementum  ligula
tempor  eget.  In quis rhoncus
nunc,  at  aliquet orci. Fusce
at   dolor   sit   amet  felis
suscipit   tristique.   Nam  a
imperdiet   tellus.  Nulla  eu
vestibulum    urna.    Vivamus
tincidunt  suscipit  enim, nec
ultrices   nisi  volutpat  ac.
Maecenas   sit   amet  lacinia
arcu,  non dictum justo. Donec
sed  quam  vel  risus faucibus
euismod.  Suspendisse  rhoncus
rhoncus  felis  at  fermentum.
Donec lorem magna, ultricies a
nunc    sit    amet,   blandit
fringilla  nunc. In vestibulum
velit    ac    felis   rhoncus
pellentesque. Mauris at tellus
enim.  Aliquam eleifend tempus
dapibus. Pellentesque commodo,
nisi    sit   amet   hendrerit
fringilla,   ante  odio  porta
lacus,   ut   elementum  justo
nulla et dolor.

否则,您可以直接从数据库连接器访问日志收集:

Test.createOrder = function(amount, callback) {
    // ...
    Test.app.models.Log.create(/*...*/)
    // ...
};

答案 1 :(得分:1)

为了创建自定义的CRUD操作,可以使用环回远程方法实现。环回中的每个模型都继承有Persistent类,您可以使用其默认方法从远程方法执行CRUD操作。在下面查看我的示例,

创建操作

下面的示例将在MongoDB中创建一个文档,并在Log集合中插入一条记录。

Test.createOrder = function (amount, callback) {

    // Inserting object into database        
    Test.create({amount: amount, /*data to insert*/}, function(err, data) {

        // Adding logs to the logs collection 
        Test.app.models.Log.insert({ message: "order created", /*data to insert*/}, function(err, data) {
            callback(null);
        });
    });
};

持久性模型中有更多方便的方法,可用于在不同情况下执行创建操作,例如upsertfindOrCreatesave等。

读取操作

下面的示例将根据应用的过滤器从MongoDB中检索几个文档,并在Log集合中插入一条记录。

Test.findOrders = function (amount, callback) {

  // Finding objects from database
  Test.find(/** filters - Optional **/ { where: {}, limit: 10, fields: [], include: [], order: "", skip : 1}, function(err, data) {

    console.log(data);

    // Adding logs to the logs collection
    Test.app.models.Log.insert({ message: "orders finded", /*data to insert*/}, function(err, logData) {
      callback(data);
    });
  });
};

这里的过滤器是完全可选的。 where用于指定条件,您可以使用其子过滤器(如gtltnin等)来获取更多特定于条件的记录。 fields可用于从集合中选择特定的列,include可用于根据关系来连接不同的集合。其余过滤器的名称可以理解。有关过滤器的更多信息,您可以检查提到的here链接。

持久性模型中还提供了许多有用的方法,这些方法可用于在不同情况下执行读取操作,例如findfindOne等。

更新操作

下面的示例将更新MongoDB中的文档,并在Log集合中插入一条记录。

Test.updateOrder = function (amount, callback) {

      // Updating object into database
      Test.updateAttribute(/* where filter */{id: 1}, {amount: 10, /*data to update*/}, function(err, data) {

        // Adding logs to the logs collection
        Test.app.models.Log.insert({ message: "order updated", /*data to insert*/}, function(err, data) {
          callback(null);
        });
      });
    };

您可以where过滤器的每个子过滤器执行更新操作。同样,在持久性模型中有许多方便的方法可以在几种不同的场景中使用(例如updateAttributeupdateAttributescreateUpdatesbulkUpdate等)。 / p>

删除操作

下面的示例将从MongoDB中删除文档,并在Log集合中插入一条记录。

Test.deleteOrder = function (amount, callback) {

      // Deleting object from database
      Test.destroyById(123, function(err, data) {

        // Adding logs to the logs collection
        Test.app.models.Log.insert({ message: "order deleted", /*data to insert*/}, function(err, logData) {
          callback(data);
        });
      });
    };

持久模型还包含不同类型的方法,用于根据不同的场景(例如destroyAlldestroyById)执行删除操作。

有关CRUD操作的官方文档 您还可以从以下提到的URL中找到有关回送中CRUD操作的完整文档:

下面的链接包含持久性模型的所有可用方法,这些方法可能对应用多个BL有用,

在上述链接中,还有几种方法可以执行批量操作。

记录

已经有几个扩展名可用,这些扩展名可以很容易地与环回连接以执行日志记录操作,其中一些在下面列出:

  • loopback-component-logger(link),

这对于在控制台或数据库中记录操作非常有用。