Как написать промежуточное ПО для graphql, которое будет вызываться перед каждым распознавателем

В каждом запросе я отправляю токен и проверяю его в промежуточном ПО Express.

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, которое принимает аргументы запроса перед вызовом каждого распознавателя? Теперь, если я хочу выдать ошибку поврежденного токена, мне нужно написать проверку в каждом распознавателе?


person Khotey Vitaliy    schedule 14.09.2017    source источник
comment
возможно, это может помочь вам stackoverflow.com/questions/18700729/   -  person Shyam Babu    schedule 14.09.2017
comment
github.com/DubFriend/graphql-resolve   -  person Aᴍɪʀ    schedule 16.09.2017


Ответы (1)


Вы можете просто ответить и вернуться, не вызывая следующее промежуточное ПО:

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