风帆助手和机器规格

Nas*_*tyo 5 helpers sails.js

我将sails 升级到@^1.0.0 版本,在开发API 时,我想使用服务,但Sails 文档建议现在使用Helper。而且我真的不习惯使用新的方式来描述帮助程序、构建脚本或操作。

我疯狂的所有尝试都没有成功。

在下面的例子中..

这是我的控制器调用:

    var ob = await ails.helpers.testy('sayHello');

    res.json({ob:ob});
Run Code Online (Sandbox Code Playgroud)

帮手

模块.出口 = {

friendlyName: 'Testy',


description: 'Testy something.',


inputs: {

  bla: {
    type: 'string'
  }

},


exits: {

  success: {

  }

},


fn: async function (inputs, exits) {

  console.log({blabla:inputs.bla})

  if(!inputs.bla) return exits.error(new Error('text not found'));

  var h = "Hello "+ inputs.bla;

  // All done.
  return exits.success(h);

}
Run Code Online (Sandbox Code Playgroud)

};

我收到这个错误

error: A hook (`helpers`) failed to load!
error:
error: Attempted to `require('*-serv\api\helpers\testy.js')`, but an error occurred:
--
D:\*-serv\api\helpers\testy.js:28
  fn: async function (inputs, exits) {
            ^^^^^^^^
SyntaxError: Unexpected token function.......
Run Code Online (Sandbox Code Playgroud)

如果我从控制器中删除“async”和“await”,那么 ob 对象返回 null 并且我遇到了这个错误

WARNING: A function that was initially called over 15 seconds
ago has still not actually been executed.  Any chance the
source code is missing an "await"?

To assist you in hunting this down, here is a stack trace:
```
    at Object.signup [as auth/signup] (D:\*-serv\api\controllers\AuthController.js:106:26)
Run Code Online (Sandbox Code Playgroud)

Pav*_*kov 4

评论中的第一个人是对的。

删除异步后,fn: async function (inputs, exists) {};您需要设置sync: true默认情况下为 false。它在同步助手部分的助手文档页面中进行了描述。

所以你的代码应该是这样的

module.exports = {


  friendlyName: 'Testy',


  description: 'Testy something.',


  sync: true, // Here is essential part


  inputs: {

    bla: {
      type: 'string'
    }

  },


  exits: {

    success: {

    }

  },


  fn: function (inputs, exits) {

    console.log({blabla:inputs.bla})

    if(!inputs.bla) return exits.error(new Error('text not found'));

    var h = "Hello "+ inputs.bla;

    // All done.
    return exits.success(h);

  }


};
Run Code Online (Sandbox Code Playgroud)

从另一方面来说,你遇到了async/await的问题。最重要的原因是

  1. 不支持 Node.js 版本 - 检查您当前的版本是否支持它
  2. 如果您使用sails-hook-babel或其他 Babel 相关解决方案,您可能会错过异步/等待处理所需的插件