如何在另一个持久化模型的另一个远程方法中调用一个持久模型的远程方法

时间:2018-03-23 15:50:05

标签: loopbackjs strongloop loopback

这是我在model1.js中尝试的内容:

      model1.remotemethod1 = function(id, data, cb) {
var model2 = app.models.model2;
model2.remotemethod2(id, data).then(response => {
cb(null, true);
});
 };

这是我的model2.js: 它有remotemethod2的定义。

 'use strict';

  module.exports = function(model2) {

  model2.remotemethod2 = function(id, data, cb) {
     var promise;
     let tags = data.tags ? data.tags.slice() : [];
     delete data.categories;
     delete data.tags;
     promise = model2.upsertWithWhere({
             or: [
                 {barcode: data.barcode},
                 {id: data.id},
             ],
         }, data);
     promise.then(function(model2) {
         model2.tags.destroyAll().then(function() {
             for (let i = 0; i < tags.length; i++) {
                 model2.tags.add(tags[i]);
             }
             cb(null, model2);
         });
     });
    };
 };

但它不起作用! 我认为app.models.model2没有给我模型的远程方法!也许我应该得到model2的一个实例!

2 个答案:

答案 0 :(得分:1)

remotemethod1 server.js中声明app.start,您就可以访问正确的app.models.model2,并且您将能够使用其远程方法。

app.start = function() {
     model1.remotemethod1 = (id, data, cb) =>  {
        var model2 = app.models.model2;
        model2.remotemethod2(id, data).then(response => {
           cb(null, true);
        });
     };

      model1.remoteMethod(
        'remotemethod1', {
            http: { path: '/remotemethod1', verb: 'post', status: 200, errorStatus: 400 },
            accepts: [{arg: 'id', type: 'number'}, {arg: 'id', type: 'object'}],
            returns: {arg: 'status', type : 'string' }
        }) ;
    }  

    //  The rest of app.start...

编辑您还可以使用位于app

的文件创建正确的myprojectname/server/boot上下文的远程方法
`module.exports(app) {
     /* Create remote methods here */
}`

答案 1 :(得分:0)

var (VAR-NAME)= (CURRENT-MODEL).app.models.(ANOTHER_MODEL);

您现在可以通过调用其他方法之一来使用其他模型

EX:

VAR-NAME.create();