Express 从graphql返回状态代码
从graphql瑜伽中,在调用解析程序之前,我检查解析程序的内部,该解析程序是否受到保护 如果解析器受保护,并且用户未登录,我可以抛出如下错误:Express 从graphql返回状态代码,express,graphql,graphql-js,express-graphql,Express,Graphql,Graphql Js,Express Graphql,从graphql瑜伽中,在调用解析程序之前,我检查解析程序的内部,该解析程序是否受到保护 如果解析器受保护,并且用户未登录,我可以抛出如下错误: 返回新错误('Token丢失') 这将停止请求的执行,并返回正确的消息形状,并带有一个错误字段 { "data": null, "errors": [ { "message": "Token is missing", "locations": [ { "line": 3,
返回新错误('Token丢失')代码>
这将停止请求的执行,并返回正确的消息形状,并带有一个错误字段
{
"data": null,
"errors": [
{
"message": "Token is missing",
"locations": [
{
"line": 3,
"column": 3
}
],
"path": [
"users"
]
}
]
}
但响应的状态为200,这是不正确的。我希望能够选择自己的状态,比如403
以下是我当前的解析器实现:
const withAuth = authed => (_, args, context, ...rest) => {
if (!context.token) {
return new Error('Token is missing');
}
let result = null;
try {
result = jwt.verify(context.token, process.env.HASH);
} catch (__) {
return new Error('Incorrect token');
}
const { username, email } = result;
if (!username || !email) {
return new Error('Incorrect token');
}
return authed(_, args, { ...context, user: { username, email } }, ...rest);
};
const resolvers = {
Query: {
users: withAuth(resolver(User)), //get users from db
}
我想在express中添加一个before-request中间件,但由于所有调用都是对同一个端点进行的,因此无法判断调用的是哪个查询
任何意见都将不胜感激 根据graphql规范,端点应始终返回状态200:
响应中的错误条目是错误的非空列表,其中
每个错误都是一个映射
如果在请求的操作期间未遇到错误,则
错误条目不应出现在结果中
每个错误都必须包含一个带有字符串的关键消息的条目
用于开发人员的错误说明,以指导
理解并纠正错误
如果一个错误可以关联到请求中的特定点
GraphQL文档,它应该包含一个带有键位置的条目
带有位置列表,其中每个位置都是带有键的地图
行和列,都是从1开始的正数,表示
关联语法元素的开头
GraphQL服务器可以根据自己的选择提供额外的错误条目
产生更多有用的或机器可读的错误,但是
规范的版本可能会描述错误的其他条目
如果响应中的数据项为null或不存在,则会显示错误
响应中的条目不能为空。它必须至少包含一个
错误。它包含的错误应该表明为什么没有数据能够
被退回
如果响应中的数据项不为null,则
响应可能包含执行期间发生的任何错误。如果
执行期间发生错误,它应该包含这些错误