使用hapijs pre功能确定graphql结果

时间:2017-03-19 15:31:05

标签: mongoose graphql hapijs apollo-server

我正在尝试进行预处理以根据用户的身份验证(在我的标头中的标记中表示)来确定我的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;

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。它们使您能够在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);
            });
        });
      }
}

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