如何使用 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
此外,req
和 res
无法传递给其他服务,因为这些对象不可序列化。
无论如何,您可以考虑查看视频教程:https://www.youtube.com/watch?v=t4YR6MWrugw
它涵盖了 Moleculer 的核心概念并展示了如何调用动作
我正在深入研究 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
此外,req
和 res
无法传递给其他服务,因为这些对象不可序列化。
无论如何,您可以考虑查看视频教程:https://www.youtube.com/watch?v=t4YR6MWrugw
它涵盖了 Moleculer 的核心概念并展示了如何调用动作