如何在 Strapi 中间件中到达请求主体?
How do I reach request body in Strapi middleware?
我已经设法让中间件在 Strapi 中工作。但是,我在请求中看不到正文。
在 /middlewares/getEmail/index.js 里面,我有
module.exports = (strapi) => {
return {
initialize: function (cb) {
strapi.app.use(async (ctx, next) => {
if (ctx.method === "POST" && ctx.url === "/email-leads") {
console.log(ctx);
}
await next();
});
},
};
};
和 ctx 请求日志:
request: {
method: 'POST',
url: '/email-leads',
header: {
'content-type': 'application/json',
accept: 'application/json',
'user-agent': 'PostmanRuntime/7.26.8',
'postman-token': 'xxx',
host: 'localhost:1337',
'accept-encoding': 'gzip, deflate, br',
connection: 'keep-alive',
'content-length': '33'
}
},
这是我在此应用程序上编写的唯一中间件。在 /config/middleware.js 中,我有
module.exports = {
load: {
before: ["getEmail", "responseTime", "logger", "cors", "responses", "gzip"],
order: ["parser"],
after: ["router"],
},
settings: {
getEmail: {
enabled: true,
},
},
};
我读到这个 koa-body/unparsed.js 来阅读正文,但 ctx.request 中几乎没有正文。感谢您的帮助。
所以,我已经找到了解决方案。发在这里以防其他人需要它。
在 config/middleware.js
中,我更改了负载,将自定义中间件带到 after
数组。
load: {
before: ["responseTime", "logger", "cors", "responses", "gzip"],
after: ["parser", "router", "getEmail"],
},
如果我登录 ctx
或 ctx.request
,我仍然看不到 ctx.request.body
。但是,如果我直接使用ctx.request.body
,我可以达到它以防加载如上写(或在parser
之后自定义中间件)。
如果你在 await next();
行之前 console.log(ctx.request.body);
它会打印 undefined
因为 body 还没有加载。所以你有 2 个获取正文的选项。
- 在
await next();
行后使用 console.log(ctx.request.body);
- 从原始节点请求加载正文,如下例
Click Here
我已经设法让中间件在 Strapi 中工作。但是,我在请求中看不到正文。
在 /middlewares/getEmail/index.js 里面,我有
module.exports = (strapi) => {
return {
initialize: function (cb) {
strapi.app.use(async (ctx, next) => {
if (ctx.method === "POST" && ctx.url === "/email-leads") {
console.log(ctx);
}
await next();
});
},
};
};
和 ctx 请求日志:
request: {
method: 'POST',
url: '/email-leads',
header: {
'content-type': 'application/json',
accept: 'application/json',
'user-agent': 'PostmanRuntime/7.26.8',
'postman-token': 'xxx',
host: 'localhost:1337',
'accept-encoding': 'gzip, deflate, br',
connection: 'keep-alive',
'content-length': '33'
}
},
这是我在此应用程序上编写的唯一中间件。在 /config/middleware.js 中,我有
module.exports = {
load: {
before: ["getEmail", "responseTime", "logger", "cors", "responses", "gzip"],
order: ["parser"],
after: ["router"],
},
settings: {
getEmail: {
enabled: true,
},
},
};
我读到这个 koa-body/unparsed.js 来阅读正文,但 ctx.request 中几乎没有正文。感谢您的帮助。
所以,我已经找到了解决方案。发在这里以防其他人需要它。
在 config/middleware.js
中,我更改了负载,将自定义中间件带到 after
数组。
load: {
before: ["responseTime", "logger", "cors", "responses", "gzip"],
after: ["parser", "router", "getEmail"],
},
如果我登录 ctx
或 ctx.request
,我仍然看不到 ctx.request.body
。但是,如果我直接使用ctx.request.body
,我可以达到它以防加载如上写(或在parser
之后自定义中间件)。
如果你在 await next();
行之前 console.log(ctx.request.body);
它会打印 undefined
因为 body 还没有加载。所以你有 2 个获取正文的选项。
- 在
await next();
行后使用console.log(ctx.request.body);
- 从原始节点请求加载正文,如下例
Click Here