React:: 错误:GraphQL 错误:无法读取未定义的属性“标题”
Posted
技术标签:
【中文标题】React:: 错误:GraphQL 错误:无法读取未定义的属性“标题”【英文标题】:React:: Error: GraphQL error: Cannot read property 'headers' of undefined 【发布时间】:2020-07-25 19:54:27 【问题描述】:我在 netlify 上部署了我的应用程序。
在本地服务器上,我可以发表评论。
但在生产模式下,
“错误:GraphQL 错误:无法读取未定义的属性 'headers'” 当我提交评论时出现。
我尝试了很多方法来解决这个问题,但我无法解决它。
我认为问题在于我在 Heroku 上的 GraphQL 服务器。
check-auth.js
const AuthenticationError = require('apollo-server');
const jwt = require('jsonwebtoken');
const SECRET_KEY = require('../config');
module.exports = (context) =>
// context = ... headers
const authHeader = context.req.headers.authorization;
if (authHeader)
// Bearer ....
const token = req.headers.authorization || '';
//I tried. const token = req.headers["authorization"];
if (token)
try
const user = jwt.verify(token, SECRET_KEY);
return user;
catch (err)
throw new AuthenticationError('Invalid/Expired token');
throw new Error("Authentication token must be 'Bearer [token]");
throw new Error('Authorization header must be provided');
;
只有登录用户才能发表评论。
用户登录后,我的用户 ID 存储在本地服务器中。 关键是 jwtToken。
【问题讨论】:
【参考方案1】:这是一个错字还是您在获取令牌时实际上错过了上下文对象?
const token = context.req.headers.authorization || '';
检查您的代码中的上述行,当您已经在 authHeader 常量中拥有它时,为什么您甚至需要它。
理想情况下,您的令牌将位于 context.req.headers['x-token'] 或 req.headers['token'] 取决于您的传递方式。
【讨论】:
【参考方案2】:问题可能在于您在 Apollo 服务器中转发请求对象的方式。确保它是这样的:
const server = new ApolloServer(
typeDefs,
resolvers,
context: ( req ) => (req), // LIKE THIS
context: ( req ) => req, // NOT LIKE THIS, Results in undefined req
);
【讨论】:
以上是关于React:: 错误:GraphQL 错误:无法读取未定义的属性“标题”的主要内容,如果未能解决你的问题,请参考以下文章
使用 React 钩子处理 graphQL 突变错误(useMutation + Apollo-client)
尝试使用 React Apollo Query 组件进行 GraphQL 查询,打字稿导致错误
无法使用 graphql-middleware-sentry 从 GraphQL 接收错误
React + Apollo:GraphQL 错误数组未传递到组件中
graphql_devise 用于 Rails/Graphql/Apollo/React 中的身份验证。 “字段需要身份验证”错误