Mongoose 使用hapijs pre功能查看graphql结果

Mongoose 使用hapijs pre功能查看graphql结果,mongoose,graphql,hapijs,apollo-server,Mongoose,Graphql,Hapijs,Apollo Server,我正在尝试进行预处理,以根据用户的身份验证(在标题中的令牌中表示)确定apollo server(graphql)解析器结果的范围。我不确定这样做的最佳方式,这就是我目前所拥有的: // Graphql Options const GraphqlOptions = { schema: executableSchema, debugging: true, ----&g

我正在尝试进行预处理,以根据用户的身份验证(在标题中的令牌中表示)确定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);
            });
        });
      }
}
在编写解析器时,您现在可以在上下文中访问此字段。我必须进入并修改解析器,以便只查询符合我的范围条件的内容