-1

我正在研究molerr.js,我发现唯一难以理解的事情;如何在下面给出的服务操作中获取参数是我的代码

const ApiGateway = require("moleculer-web");
module.exports = {
name: "api",
mixins: [ApiGateway],
settings: {
    port: process.env.PORT || 3000,
    bodyParsers: {
        json: true,
        urlencoded: { extended: true }
    },
    routes: [{
        path: "/api",
        whitelist: [

            "**"
        ]
    }],

    assets: {
        folder: "public"
    }
},
};

下面是我想要获取发布参数的用户服务

module.exports = {
name: "users",
dependencies: ["guard"],

actions: {
    create: {
        restricted: [
            "api"
        ],

        async handler(ctx,route, req, res) {
            this.logger.info(req);
            this.logger.info("'users.create' has been called.");
            const token=await ctx.call("guard.generate",{service:"abc"});

我想要的是

            const token=await ctx.call("guard.generate",{service:req.body.name});

代替

            const token=await ctx.call("guard.generate",{service:"abc"});
            const verify=await ctx.call("guard.check",{token:token});
            return [token,verify,req];
        }
    },
   }
4

1 回答 1

1

Moleculer´s Actions 具有以下签名:<actionName> (ctx) {// logic}<actionName>: { handler (ctx) { // logic}}。所以你要做的是:

module.exports = {
  name: "users",

  actions: {
    welcome: {
      handler(ctx) {
        console.log(ctx.params) // Print the request params
        // Call other actions ctx.call('serviceName.actionName`, ...data...)
        return ctx.params
      }
    }
  }
}

有关操作的更多信息:https ://molecler.services/docs/0.13/actions.html

函数签名handler(ctx,route, req, res)是一个路由挂钩,仅在 API 网关中使用。有关路由挂钩的更多信息:https ://moleculer.services/docs/0.13/moleculer-web.html#Route-hooks

此外,reqandres不能传递给其他服务,因为这些对象不可序列化。

无论如何,您可以考虑查看视频教程:https ://www.youtube.com/watch?v=t4YR6MWrugw

它涵盖了 Moleculer 的核心概念并展示了如何调用动作

于 2019-10-31T16:46:11.083 回答