我知道异步钩子是实验性的,但撇开它不谈,我想尝试的是为每个请求发出请求、响应或全局/存储状态,就像 PHP 所做的那样,它只是在任何地方获取请求或响应(GET ["field"]
,POST ["field"]
等。 ..)。我一直在研究node-request-context 之类的库,它们executionAsyncId
用作唯一值来保存当前请求上下文的数据,我想要一些简单的东西,但我想保证它是唯一的,因此我可以做一些事情像我服务器上的每个请求一样::
为每个请求存储数据的状态:
const requestState = new Map();
requestState
无需通过参数传递即可全局访问的函数(这是一个简单的示例,但可能有多个需要的深层嵌套函数requestState
):
const hooks = require('async_hooks');
const runTask = () => {
const data = requestContextStore.get(hooks.executionAsyncId());
console.log('data is', data.req);
};
和路由器:
...
const hooks = require('async_hooks');
server.get('/', (req, res, next) => {
requestState.set(hooks.executionAsyncId(), { req, res, next });
res.json({
msg: 'Success!'
});
contextStore.delete(hooks.executionAsyncId());
});
...
这是有效的吗?这是否保证我将收到每个请求的唯一状态?即使客户端(移动设备、Web 等)并行发出请求等?
如果无效,还有其他方法吗?
我希望你能帮帮我 :)