使用 hapijs 前置功能限定 graphql 结果的范围

Scoping graphql results with hapijs pre functionality

我正在尝试根据用户的身份验证(在我的 header 中以令牌表示)进行预处理,以限定我的 apollo-server (graphql) 解析器结果的范围。我不确定这样做的最佳方法,这是我目前所拥有的:

// Graphql Options
const GraphqlOptions = {
                          schema: executableSchema,
                          debugging: true,
              ---->       pre: [{ method: preMongoose, assign: 'm1'}],
                          context: {
                              user: Mongoose.model('User'),
                              SomethingElse: Mongoose.model('SomethingElse')
                          }
                      };

在我的 preMongoose 文件中

'use strict';

const preMongoose = (request, reply) => {

  // code to modify mongoose model's pre to only return results based off
  // request's auth token

};

module.exports = preMongoose;

好的,我找到了解决方案。它们使您能够拦截 server.register 选项中的请求。我是这样做的:

{
      register: graphqlHapi,
      options: {
      path: '/graphql',
      graphqlOptions: (request) => {

        return new Promise((resolve, reject) => {

          // a function that passes the scoping info in the response
          getScopableData(request, (err, res) => {
              if (err) {
                return reject(err);
              }

              // add scoping data
              GraphqlOptions.context.scopingOptions = res;

              return resolve(GraphqlOptions);
            });
        });
      }
}

您现在可以在编写解析器时在上下文中访问此字段。我不得不进入并修改解析器以仅查询符合我的范围标准的内容。