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