2016-09-05 8 views
0

Я хотел бы передать объект "token" в POST/MyObject. Самый простой способ сделать это - добавить его как свойство в MyObject.json. Проблема в том, что этот токен не сохраняется (он длится недолго и не нужно его сохранять).Могу ли я скрыть свойства модели из источников данных в strongloop?

Я понял, как обойти эту проблему для POST:

MyObject.beforeRemote('create', function (context, unused, nextFn) { 
    var token = context.args.data.token; 

    //We have to delete this so it doesn't try to put it in the database 
    delete context.args.data.token; 
    nextFn(); 
}); 

Но код аварии, когда я делаю GET.

Я попытался просто добавить его в качестве второго параметра для нового удаленного метода, с MyObject первых парами, но после борьбы с strongloop в течение трех часов и не имея ничего, чтобы показать его я сдалась/

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

+0

Почему вы должны добавить к свойствам? Как ваш удаленный метод? –

+0

Мне это нужно, потому что я использую его для дополнительной работы с сторонней библиотекой, которая нуждается в этом токене. Если токен действителен, я хочу сохранить MyObject в базе данных без токена. Я добавляю его к свойствам, чтобы он отображался в схеме модели для POST, так как это необходимо для этого. – anonymouse

+0

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

ответ

1

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

//MyObjectInput.json 
{ 
    "name": "MyObjectInput", 
    "base": "Model", 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "name": { 
     "type": "string", 
     "required": true 
    }, 
    "token": { 
     "type": "string" 
    } 
    ... 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [], 
    "methods": {} 
} 


//MyObject.json 
{ 
    "name": "MyObject", 
    "base": "PersistedModel", 
    "strict": true, 
    "idInjection": true, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "name": { 
     "type": "string", 
     "required": true 
    } 
    ... 
    }, 
    "validations": [], 
    "relations": {}, 
    "acls": [], 
    "methods": {} 
} 

Пожалуйста, обратите внимание, что sctrict ключ в MyObject.json. Он означает, что все определенные свойства должны сохраняться. Теперь у вас нет token в определении MyObject, поэтому он не сохраняется.

//MyObject.js 
MyObject.remoteMethod(
     'create', { 
      accepts: [ 
       { 
        arg: 'data', 
        type: 'MyObjectInput', 
        http: {source: 'body'} 
       } 
      ], 
      returns: { 
       arg: 'result', 
       type: 'object', 
       root: true 
      }, 
      http: { 
       path: "/create", 
       verb: 'post', 
       status: 201 
      } 
     } 
    ); 
+0

Спасибо! Это умное обходное решение. – anonymouse