![](/img/trans.png)
[英]How can I get header for node graphql resolver without express?
[英]How can I share data between 2 resolver functions in Express GraphQL?
我有 2 个查询和相应的函数,但是在编写解析器时,我不确定如何存储第一个函数数据,然后在第二个函数中重用它。 注意:我不想再次调用 function,因为它将再次执行并且有一个内联 API 调用。 我只想在 express js 的全局 state 上像 session 一样使用它。 这是代码:
const resolvers={
getStudent:async({id})=>{
const resp=await service(id)
return resp;
},
const courseDetails:()=>{
console.log(resp)// I want to access resp object from above func., But don't want to call getStudent again
}
}
我尝试了上下文但没有用。
您可以实现一个简单的内存存储。 通过存储Promise
并返回它,您无需担心对相同资源的多个请求。
const got = require('got');
const assert = require('assert');
function studentServiceFactory(options = {}) {
const TTL = options.ttl || 60 * 60 * 5; // default 5 min ttl
const BASE_API = "https://swapi.dev/api";
const store = {};
return {
get: ({ id }) => {
if(!store[id] || store[id].timestamp + TTL < Date.now()) {
// store the promise
store[id] = {
promise: got(`${BASE_API}/people/${id}`),
timestamp: Date.now(),
};
console.log(`${BASE_API}/people/${id}`);
}
return store[id].promise;
}
}
}
const studentService = studentServiceFactory({ ttl: 1000});
const resolvers = {
studentService: studentService,
};
// test program
(async () => {
const request1 = await resolvers.studentService.get({ id: 1 });
const request2 = await resolvers.studentService.get({ id: 1 });
// Both calls will return the same promise.
assert.equal(request1, request2);
// wait for resources to get stale
setTimeout(async() => {
const request3 = await resolvers.studentService.get({ id: 1 });
assert.notEqual(request1, request3);
}, 3000);
})();
两个请求相互独立。 在两个请求之间共享数据的唯一方法是将数据保存在某个地方。 它可以是文件、数据库等。在您的情况下,您可以简单地在另一个解析器中再次调用服务 function。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.