Sails v1基于机器的新操作和自定义响应

时间:2017-09-27 21:23:10

标签: sails.js

我正在从Sails v0.12升级我们的API - > v1,这是由使用自我验证机器进行控制器操作提示的。在经历了大量令人头疼的代替折旧代码之后,我已经陷入了困境......

使用v0.12(相反,使用较旧的“req,res”控制器样式),可以全面使用自定义响应处理程序。我已经利用了这一点,并在所有响应类型的末尾请求记录(带有一些额外的数据)。这样做是为了记录数据库中的所有请求,因此我们可以深入了解我们的生产服务器正在做什么(因为它们是负载平衡的,有一个中心位置来查看这是必须的,这是一个简单的方法)。

所以现在,我的问题是推进“Actions2”机器式动作。如何在这些东西中使用这些自定义响应类型?我们被迫在我们的存在中重复自己吗?我找不到任何好的文档来帮助指导这个过程,我也找不到一种一致的方法来使用机器作为动作“挂钩”到响应的末尾。我找不到任何关于机器可以给Sails的选项的文档。

2 个答案:

答案 0 :(得分:0)

Sails.js仍然支持处理控制器的旧方法。因此,您仍然可以使用与Sails 0.12完全相同的方式编写控制器,而不是使用“机器作为操作”模块

答案 1 :(得分:0)

@Nelson是的,我了解这一点,但当时那根本不是我想要的。我想要Actions2的所有好处。

编辑:虽然下面原始的,带注释的注释仍然有效,但是使用Actions2和自定义responses文件夹范例的首选方法是在Actions2文件中执行以下操作:

module.exports = {
    friendlyName: 'Human-friendly name of function',

    description: 'Long description of function and what it does.',

    inputs: {
        userCommand: {
            type: 'string',
            required: true,
            description: 'Long, human-readable description of the input'
        }
    },

    exits: {
        success: {
             responseType: 'chatbotResponse'
        }
    },

    fn: async function(inputs, exits){
        // do some crazy stuff with the inputs, which has already been validated.

        return exits.success('Woot');
    }
}

这最终将通过responses/chatbotResponse.js,看起来与此类似:

module.exports = async function chatbotResponse(data){
    let res = this.res,
        req = this.req;

    if (!data) {
        data = 'Something didn\'t go as planned...';
    }

    // how to call a Node Machine style helper with named inputs
    await sails.helpers.finalizeRequestLog.with({req: req, res: res, body: {plainString: data}});

    return res.json(data);
};

原始:

事实证明,在Actions2函数中,您只需要添加env参数async function(inputs, exists, env)env将使您可以访问reqres。因此,如果您有执行特殊任务(如请求日志记录)的自定义响应,则只需使用return await env.res.customResponse('Hurray, you made a successful call!');