Node.js&GraphQL 第3部分:Prisma配置~

前提 (qianti)

完全为自己记录的笔记。操作系统是Windows10。数据库是PostgreSQL。
尚未与Nodejs连接。

普瑞斯玛

连接服务器和数据库的GraphQL ORM(对象关系映射)。
虽然也有本地驱动程序,但由于功能更强大,所以使用Prisma(例如迁移和验证非常方便)。
它包装数据库并公开为GraphQL API,可以用于任何类型的数据库。
也可以使用其他ORM(如Sequelize或Mongoose),但由于上述原因,Prisma更灵活,所以为什么不用Prisma呢。
通过GraphQL可以统一客户端-服务器和服务器-数据库之间的通信,这样服务器的角色会变得薄弱起来。只需将客户端的GraphQL查询传递给Prisma,然后将返回的数据直接传递给客户端(需要进行身份验证)的感觉。

Prisma 设置完成

Heroku中的PostgreSQL

    1. 登录Heroku后,点击“Create new app”,不进行任何特殊设置来创建应用。

 

    1. 转到创建的应用页面,切换到“Overview”选项卡。在“Installed add-ons”选项中选择“Configure Add-ons”。

 

    1. 在“Add-ons”的搜索框中搜索“Heroku PostgreSQL”,然后选择。

 

    选择“Hobby Dev – Free”免费计划来创建并配置数据库。

PostgreSQL图形用户界面 (pgAdmin)

    1. 您可以在以下链接中下载最新的pgAdmin(点击下载xxx.exe文件)

 

    1. 执行exe文件并按默认设置进行安装

 

    1. 运行pgAdmin后,GUI界面将在浏览器的选项卡中打开

 

    1. 在GUI界面上选择“添加新服务器”,然后在连接选项卡上输入适当的名称

 

    1. 从Heroku的数据库页面中选择“数据库凭据”部分,将其中的主机名复制并粘贴到连接选项卡的“主机名/地址”中

 

    1. 端口与Heroku的默认设置相同,无需更改

 

    1. 从Heroku的“数据库凭据”中复制数据库、用户和密码,然后分别粘贴到连接选项卡的“维护数据库/用户名/密码”中

 

    1. 如果方便的话,可以勾选“保存密码”

 

    1. 输入完成后,点击“保存”⇒将自动开始连接测试

 

    成功连接后,依次打开“服务器”⇒“自定义的服务器名称”⇒“数据库”。在我自己的情况下,有大约6000个数据库,所以我使用Ctrl+F在“数据库凭据”中搜索以找到相应的数据库。

Docker: 镜像容器化平台

    1. 请从https://www.docker.com/get-started上下载Docker Toolbox

 

    1. 执行.exe文件进行安装(全部默认设置)

 

    打开Docker QuickStart Terminal并自动开始初始化处理

普利斯玛

    1. 在中国,只需要一个选项来表达以下内容:

 

    1. 使用npm install -g prisma全局安装Prisma

 

    1. 通过prisma -v确认安装情况

 

    1. 在项目文件夹中运行prisma init [项目名]

 

    1. 对提示进行以下回答:

 

    1. 使用现有数据库⇒PostgreSQL⇒否(对于数据库中是否包含现有数据的问题)

 

    1. 设置新的Prisma服务器还是部署到现有服务器?⇒使用现有数据库

 

    1. 要部署到哪种类型的数据库?⇒PostgreSQL

 

    1. 你的数据库中是否包含现有数据?⇒否

 

    1. 输入数据库主机⇒Heroku数据库凭据中的主机

 

    1. 输入数据库端口⇒5432

 

    1. 输入数据库用户⇒Heroku数据库凭据中的用户

 

    1. 输入数据库密码⇒Heroku数据库凭据中的密码

 

    1. 输入数据库名称(数据库包括架构)⇒Heroku数据库凭据中的数据库

 

    1. 使用SSL?⇒是

 

    1. 选择生成的Prisma客户端的编程语言⇒不生成

 

    将创建prisma文件夹和3个文件

・datamodel.prisma ⇒ 这是一个用于GraphQL的类型定义文件(类似于schema.graphql)。Prisma使用此文件来确定数据库结构。
・docker-compose.yml ⇒ 这是Docker的配置文件。
・prisma.yml ⇒ 这是用于Prisma的定义文件。
※yml文件 ⇒ 这是一种类似于json文件的键值对文件。常用于配置。

version: '3' # Dockerのバージョン(以下に続くフィールドを決定する)
services:  # 使用するサービス(今回はPrismaだけ)
  prisma:
    image: prismagraphql/prisma:1.29  # 使用する Docker Container
    restart: always  # restart when deploy new changes
    ports:  # 使用するポート
    - "4466:4466"
    environment:
      PRISMA_CONFIG: |  # Prismaのコンフィグ
        port: 4466
        # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security
        # managementApiSecret: my-secret
        databases:   # 使用するデータベース
          default:
            connector: postgres
            host: xxx
            database: xxx
            ssl: true   # プロンプトで聞かれたのに書かれていなかったので追記しておく
            user: xxx
            password: xxx
            rawAccess: true
            port: '5432'
            migrations: true

部署 (bù shǔ)

    在运行`prisma init`命令后,控制台上会显示以下步骤,请按照步骤操作。
Next steps:
  1. Open folder: cd prisma
  2. Start your Prisma server: docker-compose up -d
  3. Deploy your Prisma service: prisma deploy

・docker-compose up -d ⇒ 安装运行Prisma所需的代码 ⇒ 在虚拟机中启动Prisma
・prisma deploy ⇒ 部署最新更改(例如,如果修改了datamodel.prisma,则通过prisma deploy将更改部署到Prisma,并应用于数据库)
・由于命令无法识别,可以以管理员权限运行cmd以解决问题
・在执行prisma deploy之前,请将prisma.yml按以下方式修改

endpoint: http://[Docker QuickStart Terminalで表示されるIPアドレス]:4466
datamodel: datamodel.prisma
    一旦执行完prisma deploy后,你可以通过访问[Docker QuickStart终端显示的IP地址]:4466来进入GraphQL Playground(目前该Playground连接到了Prisma提供的GraphQL API)。换句话说,你可以在这个Playground中执行Mutation来实际修改PostgreSQL数据库。Prisma会根据datamodel.prisma中定义的Type和字段自动创建Query/Mutation/Subscription,真是太棒了。
type User {
  id: ID! @unique // @uniqueは directives といってフィールドに制約をかけられる代物
  name: String!
}
キャプチャ.JPG

在这个Playground上进行了Mutation操作后,Heroku的PostgreSQL数据库将实际发生更改。

キャプチャ.JPG
数据库结构的更新

更新datamodel.prisma后,执行”prisma deploy”指令,将其应用于数据库和GraphQL API。

使用Node.js进行连接

npm install prisma-binding
npm install -g graphql-cli

・prisma-binding是一个提供给Node.js的库,用于操作Prisma GraphQL API。
https://github.com/prisma/prisma-binding

・graphql-cli ⇒ GraphQL命令行界面(用于获取模式)
https://github.com/graphql-cli/graphql-cli

由于Prisma默认从ProjectRoot/prisma/datamodel.prisma处获取Schema,所以我们需要使用graphql-cli来将fetch源更改为ProjectRoot/src/generated/prisma.graphql。

将.graphqlconfig文件中指定的Schema获取位置和保存Type定义的位置显示出来。

工作流程

1. 更新 ProjectRoot/prisma/datamodel.prisma 文件以更改类型定义。
2. 执行「prisma deploy」以将更改应用到数据库。
3. 使用「npm run get-schema」从 ProjectRoot/src/generated/prisma.graphql 获取最新的 Schema,并自动将包含所需类型的文件生成到 ProjectRoot/generated/prisma.graphql。
※ 如果在执行「prisma deploy」时出现了 internal server error,请检查与数据库的连接。如果无法从 pgAdmin 中确认数据库表格,请关闭一次 pgAdmin。
※ 当 Prisma 版本过于最新时,可能会出现错误,因此我们降低了它的版本。


※ 不知为何 prisma 的指令未能生效(级联关系的CASCADE/设置为NULL未能生效),不过通过以下方式进行了更改并解决了问题:
1. 将 datamodel.prisma 更改为 datamodel.graphql(内容未做改动)。
2. 将 prisma.yml 更改如下:

endpoint: http://[Docker QuickStart Terminalで表示されるIPアドレス]:4466
datamodel: datamodel.graphql
广告
将在 10 秒后关闭
bannerAds