我正在使用反应原生和中继的Express Graphql服务器。我的设备连接到订阅,但它不订阅它。这里的服务器中继订阅不能与反应原生
const subscriptionServer = SubscriptionServer.create(
{
execute,
subscribe,
schema,
onOperation: (message, params, webSocket) => {
console.log(params)
return params;
},
onConnect:() => {
// My device does connects
console.log("client connected")
}
},
{
server,
path: '/subscriptions'
},
);
app.use('/graphql', graphqlHTTP({
schema,
graphiql: true
}));
app.use('/graphiql', graphiqlExpress({
endpointURL: '/graphql',
subscriptionsEndpoint: `ws://127.0.0.1:8080/subscriptions`
}));
server.listen(PORT,()=> {
console.log("Groceries running on port " + PORT)
console.log(
`subscriptions is now running on ws://localhost:${PORT}/subscriptions'}`
);
});
服务器上订阅解析器我index.js,这是很麻烦搞清楚,因为每个人都使用可执行模式从apolloGraphql。
export default {
type: OrderEdges,
args: {
ShopId: {type: GraphQLID},
},
subscribe: withFilter(() => pubsub.asyncIterator('orderConfirmed'), (payload, variables) => {
console.log(payload)
console.log(variables)
return payload.orderConfirmed.node.ShopId == variables.ShopId;
}),
}
现在反应原生客户端。我的订阅设置与中继环境。
const setupSubscriptions = (config, variables, cacheConfig, observer) => {
const query = config.text; //does console logs the query
const subscriptionClient = new SubscriptionClient(`ws://192.168.0.100:8080/subscriptions`, {reconnect:true});
subscriptionClient.request({query, variables}, (err, result) => {
console.log(err) // doesn't get call inside the request method
observer.onNext(data:result)
})
}
我的订阅方法,
export default function() {
const variables = {
ShopId: shop.getShop()[0].id
}
requestSubscription(
environment,
{
subscription,
variables,
onCompleted: (res, err) => {
console.log(res)
console.log(err)
},
updater: (store) => {...},
onError: error => console.error(error),
onNext: (response) => {console.log(response)}
});
}
在那里我打电话来订购部件,
import subscription from '../../GraphQLQueries/subscriptions/orderConfirmed';
class OrdersBox extends React.Component {
constructor(props) {
super(props);
}
componentDidMount() {
//initializing subscription
orderSubscriptions();
}
当装置启动的应用程序,我的设备连接到网络插座因为我可以在SubscriptionServer中的onConnect方法内看到console.log语句。但是当有效载荷在变化之后发布时,订阅方法不会被调用。我似乎无法弄清楚我做错了什么。也许这是一些反应原生特定的配置,我错过cuz一切似乎工作正常,当我在graphiql上测试它。 我无法找到与express graphql一起使用的react-native和relay订阅的任何示例。
注意:当我使用与graphiql的订阅时,一切正常。但与反应原生和中继不兼容。
在此先感谢球员 ....
要退subscriptionClient.request({查询,变量})或subscriptionClient.request({查询,变量})。订阅({.....}); –
const setupSubscriptions =(config,variables,cacheConfig,observer)=> {0} const query = config.text; const subscriptionClient = new SubscriptionClient('ws://192.168.10.3:8080/subscriptions',{reconnect:true}); 返回subscriptionClient.request({查询,变量},(ERR,结果)=> { observer.onNext(数据:结果) }) } –
我认为.subscribe现在被移除。你只需要返回subscriptionClient.request –