node.js - Next.JS:具有承诺的解析器在 SSR 上的 api-routes-server-and-client-test 中不起作用
问题描述
使用 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 一起使用以从数据库中获取数据,但它也不起作用。我想原因是一样的。
也许我做错了什么。
客户端部分工作正常(数据在 React 水合后显示)。
如果我们使用静态对象而不是 Promise:
export const resolvers = {
Query: {
viewer (_parent, _args, _context, _info) {
return { id: 1, name: 'John Smith', status: 'cached' };
}
}
}
一切正常,这将对象置于具有正确静态标记的 SSR 服务器返回的初始状态...
我在期待什么?
我只想要服务器渲染 graphql 请求,完成承诺,将数据置于 Apollo 状态以用于 SSR,并为 SEO 目的执行 SSR。因为现在如果我连接到数据库 - 它根本不起作用(什么都没有渲染。只是空页面,因为渲染被某些东西打断了)。
解决方案
您的代码完全正确,SSR 没有问题。我在 CSR 和 SSR 模式下使用 next.js 示例api-routes-apollo-server-and-client测试您的代码。对于 SSR 测试,首先运行npm run build
,然后npm start
. 如果您的问题没有解决,请尝试更新 node.js 并重新下载示例代码并再次测试它。
推荐阅读
- python - 我可以在计算的同时得到未来的未来和计算状态吗?
- c# - MODEL和DAL之间的循环依赖
- postgresql - 为什么 psql --version 在 zsh macOS 中不起作用?
- flutter - 为什么我的 ListView.builder() 不可滚动?
- python - .predict() 仅在 CPU 上运行,即使 GPU 可用
- sap-ase - 如何在 Sybase ASE 中查找列的默认值
- windows - 脚本适用于 windows 10 但不适用于 windows 7
- node.js - 使用 Express.js 在 if 语句中等待
- oauth - 如何将我自己的 OAuth 服务器添加到 OAuth.tools?
- highcharts - 如何在highchart的全屏视图中将图表设置在中心