我可以在 strongloop 中隐藏数据源的模型属性吗?

Can I hide model properties from datasources in strongloop?

我想将 "token" 对象传递给 POST /MyObject。最简单的方法似乎是将它添加为 属性 到 MyObject.json。问题是这个令牌没有持久化(它不会持续很长时间,不需要保存)。

我想出了如何解决 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 搏斗了三个小时并且没有任何结果后我放弃了/

有什么方法可以只添加一个 属性 以便我可以在节点中使用它,但又不让它被持久化?

您可以定义一个模型来表示。

//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。它表示应保留所有已定义的属性。现在您在 MyObject 定义中没有 token,因此它不会被保留。

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