Prisma 初体验

墨承泽
2023-12-01

Prisma是我现在接触的最新的技术之一了,什么是Prisma呢,甚至你去国内网站上搜索,更多的结果都是一种使用了“先进”人工智能技术的图片编辑软件。

GraphQL大家应该都听说过,那么Graphql这么切合很多工程需求,到底为什么到现在还是可以说处于一种不温不火的状态呢?graphql自身的一些问题其实组织了它的发展,最典型的就是graphql更像是一门全新的查询语言,其复杂程度并不能被所有人所理解。

那么prisma做了什么呢?

首先prisma让你可以去忽略graphql的语法,它通过 Prisma client使用通用数据库抽象替换传统的 ORM 和数据访问层,它和docker结合的相当好,可以粘合graphql服务器和数据库。

写个简单的小应用看一下。

首先是安装:

npm i -g prisma

找个工作区创建自己的项目:

prisma init hello-world

这时 prisma会提示:

C:\Users\starinsun\Documents\docker>prisma init asd
? Set up a new Prisma server or deploy to an existing server? (Use arrow keys)

  Set up a new Prisma server for local development (based on docker-compose):
> Use existing database             Connect to existing database 
  Create new database               Set up a local database using Docker 

  Or deploy to an existing Prisma server:
  Demo server + MySQL database      Free development environment hosted in Prisma Cloud (requires login) 
(Move up and down to reveal more choices)

我们推荐使用docker,即前两个选项,这里拿第一个选项展示,你可以选择数据库

> MySQL             MySQL compliant databases like MySQL or MariaDB 
  PostgreSQL        PostgreSQL database
  MongoDB           Mongo Database

然后是客户端语言:

> Prisma TypeScript Client
  Prisma Flow Client
  Prisma JavaScript Client
  Prisma Go Client
  Don't generate

之后他就会提示并生成文件。

Created 3 new files:
    

  prisma.yml           Prisma service definition
  datamodel.prisma    GraphQL SDL-based datamodel (foundation for database)
  docker-compose.yml   Docker configuration file

Next steps:

  1. Open folder: cd asd
  2. Start your Prisma server: docker-compose up -d
  3. Deploy your Prisma service: prisma deploy
  4. Read more about Prisma server:
     http://bit.ly/prisma-server-overview

我们一个个看,首先是prisma.yml,这个文件是用来配置prisma服务的:

endpoint: http://localhost:4466
datamodel: datamodel.prisma

generate:
  - generator: typescript-client
    output: ./generated/prisma-client/

定义了端口和模型文件的名字。

接着是熟悉的docker-compose.yml:

version: '3'
services:
  prisma:
    image: prismagraphql/prisma:1.34
    restart: always
    ports:
    - "4466:4466"
    environment:
      PRISMA_CONFIG: |
        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: postgres
            user: prisma
            password: prisma
            rawAccess: true
            port: 5432
            migrations: true
  postgres:
    image: postgres
    restart: always
    # Uncomment the next two lines to connect to your your database from outside the Docker environment, e.g. using a database GUI like Postico
    # ports:
    # - "5432:5432"
    environment:
      POSTGRES_USER: prisma
      POSTGRES_PASSWORD: prisma
    volumes:
      - postgres:/var/lib/postgresql/data
volumes:
  postgres:

可以看到,包括postgresql数据库它也完全可以自动生成,包括端口映射,用户密码,持久化存储等,大家不会写docker-compose的话也可以学习写法噢!

最后是datamodel.prisma:

type User {
  id: ID! @id
  name: String!
}

据说这是SDL方式定义的,暂且先不讲,总之就是定义模型的。

接着我们可以切换到工作目录,执行:

docker-comompose up -d

一切准备就绪,我们执行:

prisma deploy

这时我们在4466端口可以看到熟悉的graphql界面,同时还可以在/_admin路由下看到精炼的管理界面。

最后关于使用TS与prisma交互我们等下使用nest一起操作,大家先感受一下吧。

 类似资料: