пользовательский CRUD в удаленном методе loopback для коллекции, отличной от модели для mongodb - PullRequest
2 голосов
/ 09 июля 2019

Я использую Loopback для моего проекта. Я создал модель 'test' и удаленный метод '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 ]

2 голосов
/ 12 июля 2019

Если у вас есть модель для вашей коллекции журналов, вы можете сделать:

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

В противном случае вы можете получить доступ к коллекции журналов непосредственно из коннектора db:

Test.createOrder = function(amount, callback) {
    // ...
    Test.app.datasources.db.collection("logs").insert(/**/);
    // ...
};
1 голос
/ 13 июля 2019

Для создания пользовательских операций CRUD вы можете использовать обратную петлю реализации методов. Каждая модель в loopback наследуется классом Persistent, вы можете использовать методы по умолчанию для выполнения операций CRUD из удаленных методов. Посмотрите мои примеры ниже,

Операция создания

Ниже приведен пример создания документа в MongoDB, а также вставка записи в коллекцию журналов.

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);
        });
    });
};

В постоянной модели есть более удобные методы, которые можно использовать для выполнения операций создания в различных случаях, таких как upsert, findOrCreate, save и т. Д.

Операция чтения

Ниже приведен пример получения нескольких документов из MongoDB на основе примененных фильтров, а также вставка записи в коллекцию журналов.

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 используется для указания условий, где вы можете использовать его подфильтры (например, gt, lt, nin и т. Д.), Чтобы получить больше записей, зависящих от условий. fields может использоваться для выбора определенных столбцов из коллекции, include может использоваться для объединения различных коллекций на основе отношений. Остальные фильтры могут быть понятны из их названий. Для получения дополнительной информации о фильтрах, вы можете проверить ссылку здесь .

В постоянной модели также доступно много полезных методов, которые можно использовать для выполнения операций чтения в различных случаях, таких как find, findOne и т. Д.

Операция обновления

Ниже приведен пример обновления документов в MongoDB, а также вставка записи в коллекцию журналов.

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 для выполнения операции обновления. Опять же, в постоянной модели доступно много удобных методов, которые можно использовать в нескольких различных сценариях (например, updateAttribute, updateAttributes, createUpdates, bulkUpdate и т. Д.).

Операция удаления

Ниже приведен пример удаления документа из MongoDB, а также вставка записи в коллекцию журналов.

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);
        });
      });
    };

Постоянная модель также содержит другой тип методов для выполнения операции удаления, основанный на различных сценариях (например, destroyAll, destroyById).

Официальная документация по CRUD операциям Вы также можете найти полную документацию по операциям CRUD в режиме loopback по нижеуказанным URL-адресам:

Ниже ссылка содержит все доступные методы постоянной модели, которые могут быть полезны для применения нескольких BL,

В приведенной выше ссылке также есть несколько методов для выполнения массовых операций.

Регистрация

Уже имеется несколько расширений, которые можно легко подключить с помощью loopback для выполнения операций регистрации, некоторые из них перечислены ниже:

  • loopback-component-logger ( link ),

Это может быть полезно для регистрации операций в консоли или в базе данных.

...