Graphql 我们如何为Feathersjs+;阿波罗2号?
为Feathersjs+Apollo v2设置挂钩时出现问题。需要它的主要原因是为了授权Graphql 我们如何为Feathersjs+;阿波罗2号?,graphql,apollo-server,feathersjs,Graphql,Apollo Server,Feathersjs,为Feathersjs+Apollo v2设置挂钩时出现问题。需要它的主要原因是为了授权 src/services/graphql/graphql.service.js:65 service.hooks(hooks); ^ TypeError: Cannot read property 'hooks' of undefined 以下是我在Feathersjs服务中设置阿波罗v2的代码。由于它没有携带模型,我不确定设置挂钩的正确方法 const { ApolloServer, g
src/services/graphql/graphql.service.js:65
service.hooks(hooks);
^
TypeError: Cannot read property 'hooks' of undefined
以下是我在Feathersjs服务中设置阿波罗v2的代码。由于它没有携带模型,我不确定设置挂钩的正确方法
const { ApolloServer, gql } = require('apollo-server-express');
const hooks = require('./graphql.hooks');
module.exports = function (app) {
const typeDefs = gql`
type Query {
hello: String
}
`;
const resolvers = {
Query: {
hello: () => 'hello world'
}
};
const server = new ApolloServer({
typeDefs: typeDefs,
resolvers: resolvers,
context: ({req, res}) => ({
provider: req.feathers.provider,
headers: req.feathers.headers,
token: req.headers['auth-token']
}),
playground: {
endpoint: 'http://localhost:3030/graphql',
settings: {
'editor.theme': 'light'
}
}
});
server.applyMiddleware({ app });
// app.use('/graphql', createService);
const service = app.service('graphql');
service.hooks(hooks);
};
所以,feathers的REST支持并不能真正满足您的需求 如果您将Feathers服务传递给
app.use
它将作为hooks等生态系统的一部分提供。如果您只是传递Express services(或者像applyMiddleware
那样间接传递),则Feathers将跳过它。它已在Express中注册,但不在app.services
中的服务列表中
您可以使用链接Express类型中间件和Feathers服务的Feathers注册服务,如:
app.use('/thing',
(req, res, next) => {
// does something
next();
},
{
get(id, params) {
// feathers stuff
}
}
);
在这一点上,整个服务可用于羽毛生态系统、挂钩等
您可以做的是:
server.applyMiddleware({ app, path: 'graphql' });
app.use('graphql', {
create(data, params) {
},
get(id, params) {
},
find(params) {
},
update(id, data, params) {
},
patch(id, data, params) {
},
delete(id, params) {
}
});
app.service('graphql').hooks(hooks);
在设置了/graphql
之后链接(无操作)服务,但我不确定您是否需要在这些服务中加入一些逻辑来正确读取数据。记住,feathers服务采用JSON等
您的另一个选择是在graphql的Express中间件中验证您的授权令牌(我假设是来自身份验证JWT的JWT?),而不是尝试将/graphql服务羽化。有趣-好的,
server.applyMiddleware
调用app。在封面下使用。你能展示一下你是如何创建你的初始app
对象以及你是如何注册这项服务的吗?这是一个全新的feathersjs项目。因此,初始app
调用const services=require('./services')
和services index.js调用const graphql=require('./graphql/graphql.service.js')代码>,这是上面的示例。因此,app是const app=express(feathers())代码>?是的,const-app=express(feathers())代码>后接app.use和app.configure,例如app.configure(服务)代码>。如果我想从feathersjs获取用户信息(如ID)并对结果进行过滤,该怎么办?你可以颠倒顺序,先放Feathers服务,然后链接一个express风格的中间件。这似乎可行,但由于'server.applyMiddleware',我无法再访问graphQL游乐场({app,path:'graphql'});`。似乎是阿波罗的限制,