在 sails.js 中使用 Actions2 时,我如何验证正文对象?

When using Actions2 in sails.js how do i validate the body object?

对sails.js

很陌生

我知道输入对象允许 actions2 验证请求参数。但是你如何 access/validate 请求正文。例如req.body。我知道我可以从这个访问它。req.body,但是对于 actions2,我想知道是否有一种方法可以通过输入或其他内置的东西来 accessing/validating 它,就像查询参数一样。

下面的动作很简单,说明了这一点。

module.exports = {
  friendlyName: 'Create',

  description: 'Create summaries.',

  inputs: {},

  exits: {},

  fn: async function (inputs, exits) {
    // All done.
    return this.res.created(this.req.body)
  },
}

正文将包含:

{
    "Summary": [
        {
            "DUPLICATE_MANIFESTED": 0,
            "DUPLICATE_SEEN": 4,
        },
        {
            "DUPLICATE_MANIFESTED": 0,
            "DUPLICATE_SEEN": 1,

        }
    ]
}

谢谢!

好的。所以我作为认真的新手意识到它确实有效。但我还发现,输入中的标准验证对于嵌套对象和数组的工作方式不同。

所以基本上您使用的是您发送的对象中的密钥,因此可以立即使用 'Summary'。

我提到的关于验证的部分。我可能是错的,但正如你所看到的,我发现 sails under the hood 使用 rttc 进行类型检查,所以第一个元素下面的每个元素都不能有任何属性,如 'description' 或 'type',而是必须直接将类型作为值。不过,我已经调查了任何进一步的嵌套。

我还发现在类型检查嵌套属性时没有一种简单的方法来缺少元素,所以基本上它们都是必需的,或者你可以将它们设置为我认为的'*',这基本上绕过了类型检查。我确实需要在这方面做更多的功课,因为我不是 100% 确定,但我认为它可能会对遇到这个问题的任何人有所帮助。

下面是我的答案。

module.exports = {
  friendlyName: 'Create',

  description: 'Create summaries.',

  inputs: {
    Summary: {
      description: 'The current incoming request (req).',
      type: [
        {
          DUPLICATE_MANIFESTED: 'number',
          DUPLICATE_SEEN: 'number',
        }
      ]
    }
  },

  exits: {},

  fn: async function (inputs, exits) {
    // All done.
    return this.res.created(inputs.Summary)
  },
}

希望这对像我这样的新手有所帮助!