首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决graphql中的“资源未找到”错误?

如何解决graphql中的“资源未找到”错误?
EN

Stack Overflow用户
提问于 2022-06-15 06:49:06
回答 1查看 272关注 0票数 1

我正在处理一个Graphql项目,在那里,我使用apollo-server-express(v3)对Graphql进行订阅,就像它们在文档中描述的那样。当我使用 PubSub from graphql-subscriptions时,我的订阅工作得很好,但正如文档中所描述的,项目的生产版本不推荐graphql-subscriptionsPubSub,因此为了生产目的,我尝试使用graphql-google-pubsub,就像它们在PubSub的生产库推荐列表中所提供的那样。我提供了下面的代码。

代码语言:javascript
复制
index.js
代码语言:javascript
复制
const express = require('express');
const { createServer } = require('http');
const { WebSocketServer } = require('ws');
const { useServer } = require('graphql-ws/lib/use/ws');
const { ApolloServer } = require('apollo-server-express');
const { ApolloServerPluginDrainHttpServer } = require('apollo-server-core');
const { GooglePubSub } = require('@axelspringer/graphql-google-pubsub');
const schema = require('./schema');

const app = express();

const httpServer = createServer(app);

const WSServer = new WebSocketServer({
    server: httpServer,
    path: 'graphql'
});

const pubsub = new GooglePubSub();

const serverCleanup = useServer({ schema, context: { pubsub } }, WSServer);


const apolloServer = new ApolloServer({
    schema,
    plugins: [
        ApolloServerPluginDrainHttpServer({ httpServer }),
        {
            async serverWillStart() {
                return {
                    async drainServer() {
                        serverCleanup.dispose();
                    }
                };
            }
        }
    ]
});

async function startServer() {
    await apolloServer.start();
    apolloServer.applyMiddleware({ app });

    httpServer.listen(4000, () => {
        console.log('Server is up on Port 4000');
    });
}

startServer();
代码语言:javascript
复制
typeDefs & resolvers
代码语言:javascript
复制
const typeDefs = gql`
    type Subscription {
        count: Int!
    }
`;

const resolvers = {
    Subscription: {
        count: {
            subscribe(_, __, { pubsub }) {
                return pubsub.asyncIterator('counter');
            }
        }
    }
};

现在,对于谷歌凭证,我有credentials.json作为项目的根。我还设置了ENV变量,名为GOOGLE_APPLICATION_CREDENTIALS。

现在的问题是,每当我从阿波罗-工作室运行订阅时,我的终端中就会出现以下错误。

我所有的凭证都在credentials.json文件中。此外,我的服务帐户具有“所有者”角色,并且帐户是“启用”的。我已经在Project.

上启用了“Cloud/Sub”。

EN

回答 1

Stack Overflow用户

发布于 2022-08-05 14:26:31

在我的项目中设置apollo-server-expressgraphql-google-pubsub有我的方法:

代码语言:javascript
复制
//route to your serviceAccount or credentials
const serviceAccount = require("../credentials.json");

const options = {
  projectId: serviceAccount["project_id"],
  credentials: {
    client_email: serviceAccount["client_email"],
    private_key: serviceAccount["private_key"],
  },
};

const commonMessageHandler = (payload)=>{
  const dataBuffer = payload.data || '{}';
  return JSON.parse(dataBuffer);
}

const topic2SubName = (topicName: string) =>
  `projects/${serviceAccount["project_id"]}/subscriptions/${topicName}`;

const pubsub = new GooglePubSub(options, topic2SubName, commonMessageHandler);

如果在你的例子中“资源未被找到”,需要检查的东西:

https://console.cloud.google.com/cloudpubsub

  • To中
  1. 创建主题和主题下的订阅,确保topic2SubName处理程序在设置Pubsub实例
  2. 时正确,以检查pubsub.publish(${topicName}, data)何时具有正确的主题名

希望这对你有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72627003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档