You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sails.js Action中使用嵌套对象作为输入参数

在Sails.js Action中使用嵌套对象作为输入的正确姿势

嘿,我来帮你搞定这个嵌套对象输入的问题!你当前的代码写法有个小问题——Sails.js没法自动识别bride和groom是嵌套对象类型,得明确配置类型和内部字段结构才行。

正确的配置方式

你需要给每个嵌套对象字段设置type: 'object',然后通过schema属性定义它的内部字段规则,就像顶层inputs的写法一样:

module.exports = {
  friendlyName: 'Signup',
  description: 'Signup a user for an account.',
  inputs: {
    bride: {
      type: 'object', // 明确指定这是对象类型
      required: true, // 如果bride是必填项就加上
      schema: { // 定义嵌套字段的规则
        firstName: {
          description: 'The first name of the bride',
          type: 'string',
          required: true
        }
        // 这里还可以添加更多bride的字段,比如lastName、email等
      }
    },
    groom: {
      type: 'object',
      required: true,
      schema: {
        lastName: {
          description: 'The last name of the groom', // 修正了你原来描述里的笔误
          type: 'string',
          required: true
        }
      }
    }
  },
  exits: {},
  fn: async function (inputs, exits) {
    // 现在可以正常访问嵌套属性啦!
    sails.log.debug(inputs.bride.firstName);
    sails.log.debug(inputs.groom.lastName);

    // 示例:用嵌套字段创建数据库记录
    const newCouple = await Couple.create({
      brideFirstName: inputs.bride.firstName,
      groomLastName: inputs.groom.lastName
    }).fetch();

    return exits.success(newCouple);
  }
}

关键要点说明

  • 必须指定对象类型:每个嵌套对象的父字段(比如bride)必须设置type: 'object',否则Sails会把它当成普通的未定义类型处理。
  • 用schema定义内部结构:schema属性的写法和顶层inputs完全一致,可以设置字段的类型、必填性、描述等规则。
  • 可选对象的处理:如果嵌套对象是可选的,可以把required设为false,或者加上defaultsTo: {}来避免访问undefined属性报错。
  • 访问嵌套属性:在fn函数里,直接通过inputs.父字段.子字段的方式就能拿到对应的值,和你最初期望的写法完全一样。

内容的提问来源于stack exchange,提问作者Scott Reed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:53:56