2

我正在尝试为我的 prisma 数据模型生成模式,同时使用机密来限制 prisma 访问。运行prisma deleteand后prisma deploy,我运行命令graphql get-schema -p prisma并收到以下错误消息:

✖ prisma/prisma.yml 找不到。

我做错了什么.graphqlconfig或者我如何列出我的 prisma.yml?谢谢。

.graphqlconfig:

{
  "projects": {
    "prisma": {
      "schemaPath": "generated/prisma.graphql",
      "extensions": {
        "prisma": "prisma/prisma.yml",
        "endpoints": {
          "default": "http://localhost:4466"
        }
      }
    }
  }
}

棱镜/棱镜.yml:

endpoint: http://localhost:4466
datamodel: datamodel.prisma
secret: 'secretFoo'

index.js:

import http from 'http';
import express from 'express';
import { ApolloServer } from 'apollo-server-express';
import resolvers from './resolvers';
import schema from './generated/prisma.graphql';
import { Prisma } from 'prisma-binding';

const prisma = new Prisma({
  endpoint: 'http://localhost:4466',
  secret: 'secretFoo',
  typeDefs: 'server/generated/prisma.graphql',
});

const server = new ApolloServer({
  context: {
    prisma,
  },
  resolvers,
  typeDefs: schema,
});

const app = express();
server.applyMiddleware({ app });

const PORT = 5000;

const httpServer = http.createServer(app);
server.installSubscriptionHandlers(httpServer);

httpServer.listen(PORT, () => {
  console.log(`Server ready at http://localhost:${PORT}${server.graphqlPath}`);
  console.log(`Subscriptions ready at ws://localhost:${PORT}${server.subscriptionsPath}`);
});

if (module.hot) {
  module.hot.accept();
  module.hot.dispose(() => server.stop());
}
4

1 回答 1

1

prisma.yml通过将以下内容添加到文件中,您可以直接从文件中生成架构:

generate:
  - generator: graphql-schema
    output: ./generated/prisma.graphql

然后你可以参考你.graphqlconfig生成的文件:

projects:
  prisma:
    schemaPath: generated/prisma.graphql
    extensions:
      endpoints:
        dev: http://localhost:4466

您通常会通过 Prisma docker-compose 文件 ( managementApiSecretin PRISMA_CONFIG) 限制对端点管理功能的访问。然后,当您运行命令时,prisma deploy您需要通过--env-file标志传递适当的环境变量,或者通过在应用程序目录的根目录中有一个 dotenv 文件(您还需要将dotenv包安装在package.json.

保护端点的另一种方法是完全禁用 GraphQL Playground。我相信 Apollo Server 在NODE_ENV设置为生产时会自动执行此操作,尽管您可以通过以下方式显式执行此操作:

const server = new ApolloServer({
  context: {
    prisma,
  },
  resolvers,
  typeDefs: schema,
  playground: false, // <- Here
});

对不起,我不认为这直接回答了你的问题,但它可能对任何一种方式都有帮助。

于 2019-12-29T20:34:01.817 回答