如何在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
相关产品推荐
相关产品推荐

