0

我知道异步钩子是实验性的,但撇开它不谈,我想尝试的是为每个请求发出请求、响应或全局/存储状态,就像 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 等)并行发出请求等?

如果无效,还有其他方法吗?

我希望你能帮帮我 :)

4

0 回答 0