全栈React GraphQL TypeScript教程||错误和解决方案

jfewjypa  于 2022-11-30  发布在  TypeScript
关注(0)|答案(1)|浏览(178)

我在2022年开始这个教程
https://www.youtube.com/watch?v=I6ypD7qv3Z8
因此,如果我看到一个错误,我会搜索解决方案,并把它放在这里。
备注中的解决方案:12:45无法使用命令"createdb"创建数据库。-解决方案:createdb typegraphql-example password authentication failed for user WINDOWS
31:38无法为语法创建新帖子-解决方案:

const emFork = orm.em.fork(); // <-- create the fork
  const post = emFork.create(Post, {
    // <-- use the fork instead of global `orm.em`
    title: "my first post",
  });
  await emFork.persistAndFlush(post); // <-- use the fork instead of global

(if您会看到一个语法错误:"类型为" {title:字符串;}"不能赋给" RequiredEntityData "类型的参数。"|||||忽略它没问题
成立于:https://stackoverflow.com/a/72799993/17736622
38:53请使用allowGlobalContext配置选项或fork()。'); - 解决方案:

const emFork = orm.em.fork(); // <-- create the fork
const posts = await emFork.find(Post, {});
console.log(posts);

成立于:https://stackoverflow.com/a/72799993/17736622(阅读了解为什么不启用允许全局上下文并使用fork istead是很重要的)
46:26看起来您使用的'graphql'包的版本不正确:"16.5.0"。请确保安装的版本符合TypeGraphQL的要求:"^15.3.0"。-解决方案:
1.转到package.json并将"graphql"版本更改为typegraphql需求(在我的示例中):"^15.3.0"
1.在终端中运行:Yarn去除图形
1.转到终端并运行:Yarn添加图ql@15.7.2
修复后,我得到了一个新的错误:46:26错误('在调用'服务器之前必须await server.start()。'解决方案:

await apolloServer.start(); //start first the apolloServer
apolloServer.applyMiddleware({ app });

56:17不允许将全局EntityManager示例方法用于特定于上下文的操作。如果需要使用全局示例的标识Map,请改用allowGlobalContext配置选项或fork()。"解决方案:(这是相同的错误,2次相同..在下一步我将跳过,解决方案是相同的:)
1.在目录解析器/post. ts(post. ts)中
@解析器()导出类PostResolver { @query (()=〉[Post])发布(@Ctx(){em}:我的上下文):如果你的帖子是免费的,那么你就可以免费使用它。//在对em执行任何操作之前添加fork ... return emFork.find(Post,{});()}}
1:00:00您的模式需要一个数组(可迭代),但您没有在解析器中返回数组解决方案:(被舒尔拉到的不是把类型[],围绕着返回解析器。

@Query(() => Post, { nullable: true })
  post(
    @Arg("id", () => Int) id: number,
    @Ctx() { em }: MyContext
  ): Promise<Post | null> {
    const emFork = em.fork();
    return emFork.findOne(Post, { id });
  }

1:02:22类型为"{title:字符串;}"不能赋给" RequiredEntityData "类型的参数。
2方案第一:

@Mutation(() => Post )
  async createPost(
    @Arg("title") title: string,
    @Ctx() { em }: MyContext
  ): Promise<Post> {
    const emFork = em.fork();
    const post = emFork.create(Post, {title} as RequiredEntityData<Post>)//this is the solution and import 
    await emFork.persistAndFlush(post); // <-- use the fork instead of global
    return post;
  }

第二溶液:
1.转到实体/Post.ts
1.在createdAt和updatedAt之后放置一个"?"(这是因为日期不是数据库默认值),如下所示:
创建时间?=新日期();
1:43:00如何安装REDIS,如果您在安装解决方案中发现错误:
1.我找到了这个简单的视频,解释了如何在windows上安装redis容易pisi https://www.youtube.com/watch?v=_nFwPTHOMIY&ab_channel=Redis
1.我得到了一个奇怪的错误,但我找到了解决方案https://www.youtube.com/watch?v=iLSAJNP1os8&ab_channel=TroubleChute
1:48:07 (property) s.RedisStoreOptions.client?: connectRedis.Client | undefined Solution: (i founded here: "https://stackoverflow.com/questions/65980722/how-to-set-connect-redis-in-typescript")
1.不要创建require的导入,完全使用你在docs中找到的,在我的例子中:禁止:
从"express-session"导入会话;从"redis"导入{createClient};从"connect-redis"导入连接Redis
是:

const session = require("express-session")
  let RedisStore  = require("connect-redis")(session)

  const { createClient } = require("redis")
  let redisClient = createClient({ legacyMode: true })
  redisClient.connect().catch(console.error)

我不知道为什么,但这工作,有另一个解决方案的链接,这是通过安装旧版本的"@types/express-session ":"1.17.1" "@类型/连接-红色":"^0.0.14"
1:55:00属性'userId'不存在解决方案:
1.转到类型. ts
1.导入这两个认为从"express"导入{Request,Response}从"express-session"导入{Session}
1.在请求中:请求:请求& {会话:会话& {用户ID:数量}}
1.在user. ts中保存并修复了错误
在此之后,您可能在index. ts中得到了新的错误,请将上下文行替换为:

context: ({ req, res }: MyContext): MyContext => ({ em: orm.em, req, res }),

1:56:00错误:连接ECONREFUSED 127.0.0.1:6379(我假设您已经安装了redis)
1.打开ubuntu或者你的redis
1.并启动Redis
1.这是命令:sudo服务redis-服务器启动
1:57:15,其中"请求.凭据":"include"?????这是因为我们有一个新版本的阿波罗快递,但这不是一个问题这里是解决方案解决方案:
1.转到apollo中的设置
1.进入连接设置-〉编辑
1.启用"包括cookie"
1.在共享标头中的bellows cookie:您需要在only shared标头中放置一个新值
1.在第一输入put中:x-转发-原型
1.在相同的但在第二输入put中:https协议
1.转到index.ts并在您的app. use上面搜索"app. use(session ..." 7.1添加此行:应用程序设置("信任代理",!prod);
"("!prod"表示在生产中为真,这对于仅在生产中为真以确保安全非常重要)" 7.2在您的应用中。use(session ...将sameSite更改为none,如下所示:sameSite:"none" 7.3再次在您的应用程序中。使用(session .. know将secure更改为true,secure:真,这是我的应用程序。使用:

app.set("trust proxy", !__prod__);

  app.use(
    session({
      name: "qid",
      store: new RedisStore({
        client: redisClient,
        disableTouch: true,
      }),
      cookie: {
        maxAge: 1000 * 60 * 60 * 24 * 365 * 10, //10 years
        httpOnly: true,
        sameSite: "none", // csrf
        secure: true, //cookie only work in https
      },
      saveUninitialized: false,
      secret: "ñsafjsalñdkfjalskdf",
      resave: false,
    })
  );

1.重要提示:在继续之前,我们需要添加一个新的think调用cors,因此请转到您的await apolloServer. start()或apolloServer. applyMiddleware({app}),在apolloServer. applyMiddleware上方创建一个名为corsSettings的常量或您想要的名称,如下所示:
const corsSettings = { origin: ["https://studio.apollographql.com"], credentials: true, };
1.更改apolloServer并添加新的cors设置:应用中间件({app,cors:设置});
最后,它将如下所示或关闭:

await apolloServer.start();

  const corsSettings = {
    origin: ["https://studio.apollographql.com"],
    credentials: true,
  };

  apolloServer.applyMiddleware({ app, cors: corsSettings });
n53p2ov0

n53p2ov01#

答案已经在问题部分了,我在堆栈溢出中做了;我不知道为什么我不能在youtube评论

thanks, and i wish i help you

相关问题