【发布时间】:2021-11-19 20:54:30
【问题描述】:
我创建了一个自定义中间件,当我启用它时,它会导致 api 和管理员无法访问。
中间件非常简单,它在服务器上的传入请求中添加了一个请求 ID:
const { createNamespace } = require('cls-hooked');
const { v4: uuidv4 } = require('uuid');
const loggerNamespace = createNamespace('logger');
module.exports = (strapi) => {
return {
initialize() {
strapi.app.use((ctx, next) => {
const reqId = ctx.request.get('X-Request-Id') || uuidv4();
ctx.response.set('X-Request-Id', reqId);
loggerNamespace.run(() => {
loggerNamespace.set('requestId', reqId);
next();
});
});
},
};
};
使用配置文件./config/middleware.json启用:
module.exports = {
settings: {
addRequestId: {
enabled: true,
},
},
};
然后,启用后,调用 API 端点或尝试连接到管理员会导致 404 Not Found。
我使用带有节点14.18.1 的strapi 3.6.8。
知道为什么吗?
PS:我怀疑cls-hooked 是罪魁祸首,但将其删除以使用贫血的中间件进行测试也不起作用。
【问题讨论】:
-
您可以尝试使用
await next()而不是仅使用next()吗?哦,另外,您可能必须将传递给run方法的回调函数标记为async。 -
我试过但效果不佳
-
这是一个很好的建议,但我发现我应该等待
run使用runPromise
标签: javascript strapi