首页 > 解决方案 > 在sails JS中链接控制器动作 - 动作2格式

问题描述

我试图在 Sails JS 中以较新的动作 2 格式将几个控制器动作链接在一起。我不能让他们两个都开火。

这就是我想要完成的事情:

// config/routes.js

'POST /api/v1/slack/slash': [ 
      { action: 'slack/slash/action1', csrf: false },
      { action: 'slack/slash/action2', csrf: false }
    ],

上面的格式返回 404。

我也试过这个:

'POST /api/v1/slack/slash': [ 'slack/slash/action1', 'slack/slash/action2' ],

在这种格式中,第一个动作运行,但不是第二个。此外,我必须禁用整个应用程序的 CSRF,而不仅仅是该路由。

我只能以旧的 actions1 格式找到有关如何执行此操作的文档。

有人知道吗?

标签: sails.js

解决方案


您可能需要改用策略:

https://sailsjs.com/documentation/concepts/policies

检查部分Policy ordering and precedence

你可以定义:

// config/policies.js

module.exports.policies = {
 'path/to-controller/*': ['policy-one', 'policy-two']
}

在您的政策中:

// api/policies/policy-one

module.exports = async function (req, res, next) {
  // First process
  next();
}

第二个:

// api/policies/second-one

module.exports = async function (req, res, next) {
  // Second process
  next();
}

为此,您需要定义一个路由和一个控制器端点。

module.exports.routes = {
  'POST /api/v1/slack/slash': { action: 'slack/slash' }
  // action2 controller: api/controllers/slack/slash.js
}

和控制器:

// api/controllers/slack/slash.js

module.exports = {
  inputs: { /* ... */},
  exits:  { /* ... */},
  fn: function (/*inputs, exits, env*/) {
    return 'Hello world'
  }
}

推荐阅读