如何使用 moleculer.js 从 bodyParser 访问 post 参数

How to access post parameters from bodyParser using moleculer.js

我正在深入研究 moleculer.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"
    }
},
};

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

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];
        }
    },
   }

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://moleculer.services/docs/0.13/actions.html

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

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

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

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