使用next.js示例api-routes-apollo-server-and-client。当我尝试以apollo/resolvers.js
这种方式实现延迟时:
export const resolvers = {
Query: {
viewer (_parent, _args, _context, _info) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve({ id: 1, name: 'John Smith', status: 'cached' });
}, 1000);
})
}
}
}
这在SSR中不起作用。在SSR阿波罗状态下,数据为空,但预期为用户数据{ id: 1, name: 'John Smith', status: 'cached' }
。
我还将它与sequelize一起使用,以从数据库中获取数据,但它也无法正常工作。我想原因是一样的。
也许我做错了。
客户端部分工作正常(数据在反应水合后显示)。
如果我们在做静态对象而不是Promise:
export const resolvers = {
Query: {
viewer (_parent, _args, _context, _info) {
return { id: 1, name: 'John Smith', status: 'cached' };
}
}
}
一切正常,这使对象从SSR服务器返回的初始状态具有正确的静态标记...
我期待什么?
我只想让服务器渲染graphql要求,完成承诺,将数据置于阿波罗状态以进行SSR并执行SSR以便进行SEO。因为现在,如果我连接到数据库-它根本不起作用(什么都没有呈现。只是空白页,因为呈现被某些内容打断了)。
您的代码是完全正确的,并且与SSR无关。我在CSR和SSR模式下使用next.js示例api-routes-apollo-server-and-client测试您的代码。对于SSR测试,请先运行npm run build
,然后再进行npm start
。如果您的问题仍未解决,请尝试更新node.js并重新下载示例代码,然后再次对其进行测试。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句