我正在为我的项目使用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远程方法将日志插入日志收集中。 我该怎么办?
答案 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);
});
});
};
持久性模型中有更多方便的方法,可用于在不同情况下执行创建操作,例如upsert
,findOrCreate
,save
等。
读取操作
下面的示例将根据应用的过滤器从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
用于指定条件,您可以使用其子过滤器(如gt
,lt
,nin
等)来获取更多特定于条件的记录。 fields
可用于从集合中选择特定的列,include
可用于根据关系来连接不同的集合。其余过滤器的名称可以理解。有关过滤器的更多信息,您可以检查提到的here链接。
持久性模型中还提供了许多有用的方法,这些方法可用于在不同情况下执行读取操作,例如find
,findOne
等。
更新操作
下面的示例将更新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
过滤器的每个子过滤器执行更新操作。同样,在持久性模型中有许多方便的方法可以在几种不同的场景中使用(例如updateAttribute
,updateAttributes
,createUpdates
,bulkUpdate
等)。 / 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);
});
});
};
持久模型还包含不同类型的方法,用于根据不同的场景(例如destroyAll
,destroyById
)执行删除操作。
有关CRUD
操作的官方文档
您还可以从以下提到的URL中找到有关回送中CRUD操作的完整文档:
下面的链接包含持久性模型的所有可用方法,这些方法可能对应用多个BL有用,
在上述链接中,还有几种方法可以执行批量操作。
记录
已经有几个扩展名可用,这些扩展名可以很容易地与环回连接以执行日志记录操作,其中一些在下面列出:
这对于在控制台或数据库中记录操作非常有用。