Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Express 从graphql返回状态代码_Express_Graphql_Graphql Js_Express Graphql - Fatal编程技术网

Express 从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,

从graphql瑜伽中,在调用解析程序之前,我检查解析程序的内部,该解析程序是否受到保护

如果解析器受保护,并且用户未登录,我可以抛出如下错误:
返回新错误('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,则 响应可能包含执行期间发生的任何错误。如果 执行期间发生错误,它应该包含这些错误