如何编写graphql的中间件,它将在每个解析器之前调用

时间:2017-09-14 16:21:56

标签: javascript node.js graphql graphql-js

在每个请求中,我发送令牌,并在快速中间件中进行检查

app.use(async (req, res, next) => {
  const authorization = req.headers.authorization;
  let token = null;
  let user;

  if (authorization) {
    try {
      token = jwt.verify(authorization, config.secret);
    } catch (e) {
     // dont work
      throw new GraphQLError({ message: 'token damaged' });
    }

    if (token) {
      const { _id } = token;

      user = await User.findOne({ _id });
    }

    if (user) {
      req.user = user;
    }
  }

  next();
});

令牌可能已损坏,我会进行检查:

try {
      token = jwt.verify(authorization, config.secret);
    } catch (e) {
      throw new GraphQLError({ message: 'token damaged' });
    }

所以我需要发送到客户端应用程序Express Error,但它没有按预期工作, 是否有任何选项可以创建graphql中间件,在调用每个解析器之前接受请求参数?现在如果我想要丢失损坏令牌的错误,我需要在每个解析器中写入检查吗?

1 个答案:

答案 0 :(得分:0)

您可以简单地回复并返回,而无需调用下一个中间件:

try {
  token = jwt.verify(authorization, config.secret);
} catch (e) {
  res.statusCode = 401;
  return res.end('{"errors": [{"message": "token damaged"}]}');
}