最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

全棧輕量級(jí)搭配之Remix Prisma Sqlite使用分析

 更新時(shí)間:2023年05月06日 11:38:26   作者:?jiǎn)讨蝊x  
這篇文章主要為大家介紹了全棧輕量級(jí)搭配之Remix Prisma Sqlite使用示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、為什么是 Remix/Prisma/Sqlite ?

最主要的一個(gè)原因就是輕量級(jí)別,輕量級(jí)體現(xiàn)在只需要一個(gè) Remix 服務(wù)即可。

  • Remix 輕量級(jí) React 全??蚣?/li>
  • Prisma 輕量級(jí) ORM 庫(kù)
  • Sqlite 嵌入式無(wú)需啟動(dòng)服務(wù)的數(shù)據(jù)庫(kù)

二、Prisma 命令提前看

如果你還不熟悉 Prisma 的常用命令,那么下面盤(pán)點(diǎn)的常用命令,提前熟悉,后面會(huì)用到:

命令說(shuō)明
prisma init初始化一個(gè)新的Prisma項(xiàng)目
prisma migrate dev將數(shù)據(jù)模型應(yīng)用于數(shù)據(jù)庫(kù)
prisma migrate reset回滾數(shù)據(jù)庫(kù)到最初狀態(tài)
prisma studio啟動(dòng)一個(gè)Web界面,用于查看和修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)
prisma generate生成Prisma客戶端代碼,用于連接和操作數(shù)據(jù)庫(kù)
prisma format格式化Prisma模型文件
prisma validate驗(yàn)證Prisma模型文件的正確性
prisma db seed開(kāi)發(fā)環(huán)境將種子數(shù)據(jù)添加到數(shù)據(jù)庫(kù)中
npx prisma migrate reset重置您的數(shù)據(jù)庫(kù)并將其恢復(fù)到遷移歷史中的最初狀態(tài)

三、在 Remix 中添加 Sqlite 和 Prisma 的流程如下:

快速初始化一個(gè) Remix 項(xiàng)目:

pnpm dlx create-remix@latest <app_name>

1、安裝依賴

pnpm install prisma -g # 全局安裝

2、用 sqlite 初始化 prisma

prisma init --datasource-provider sqlite

命令自動(dòng)生成文件如下:

  • .env 文件
DATABASE_URL="file:./dev.db"
  • prisma/schema.prisma 文件
generator client {
  provider = "prisma-client-js"
}
datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL")
}

3、在 Schema 文件中添加模型

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
  posts Post[]
}
model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String
  author    User?    @relation(fields: [authorId], references: [id])
  authorId  Int?
}

4、生成客戶端代碼

"prisma generate" 根據(jù) Prisma schema 文件生成 Prisma Client 代碼,該代碼提供了一種類(lèi)型安全的方法來(lái)訪問(wèn)數(shù)據(jù)庫(kù),簡(jiǎn)化了應(yīng)用程序與數(shù)據(jù)庫(kù)交互的過(guò)程,減少了手動(dòng)編寫(xiě)重復(fù)代碼的工作量。

5、使用遷移命令

npx prisma migrate dev --name init

每一次 Schema 發(fā)生變化的時(shí)候,都要調(diào)用此命令生成新的遷移文件(生成 sql 文件,數(shù)據(jù)文件件,安裝包)

生成文件:

├── dev.db
├── dev.db-journal
├── migrations
│   ├── 2x23x42x1x3x4x_init
│   │   └── migration.sql
│   └── migration_lock.toml

同時(shí)自動(dòng)安裝了 npm 包:

  • prisma
  • @prisma/client

6、在 studio 中查看

npx prisma studio

會(huì)啟動(dòng)一個(gè) web 服務(wù),在瀏覽器中操作數(shù)據(jù)庫(kù),不需要一個(gè)單獨(dú)的客戶端。

  • 初始界面

  • 模型中

在 stdio 也可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的增刪改查工作。

7、在 Remix 中使用

①. 對(duì)外暴露 db

  • db.server.ts 文件
import { PrismaClient } from "@prisma/client";
let prisma: PrismaClient;
declare global {
  var __db__: PrismaClient;
}
if (process.env.NODE_ENV === "production") {
  prisma = new PrismaClient();
} else {
  if (!global.__db__) {
    global.__db__ = new PrismaClient();
  }
  prisma = global.__db__;
  prisma.$connect();
}
export { prisma };

②. 抽象模型層

在 app/models 下面定義模型,以是一個(gè)示例:

import { prisma } from "~/db.server";
export async function getUserById(id: User["id"]) {
  return prisma.user.findUnique({ where: { id } });
}
export async function getUserByEmail(email: User["email"]) {
  return prisma.user.findUnique({ where: { email } });
}

③. 在 action/loader 中使用模型層操作數(shù)據(jù)庫(kù)

import { createUser, getUserByEmail } from "~/models/user.server";
export const action = async ({ request }: ActionArgs) => {
    // ...
    const existingUser = await getUserByEmail(email);
    // ...
    const user = await createUser(email, password);
}

④. 額外的 seed 初始化

如果需要在初始化的時(shí)候,初始化一些數(shù)據(jù),那么可以定義 prisma/seed.ts 文件。

import { PrismaClient } from "@prisma/client";
const db = new PrismaClient();
async function seed() {
    // use db write data ...
}
seed();

然后在 package.json 中定義 seed 字段

{
  "name": "my-project",
  "version": "1.0.0",
  "prisma": {
    "seed": "ts-node prisma/seed.ts"
  },
  "devDependencies": {
    "@types/node": "^14.14.21",
    "ts-node": "^9.1.1",
    "typescript": "^4.1.3"
  }
}

然后配合命令: npx prisma db seed 初始出初始化數(shù)據(jù)

四、流程總結(jié)

  • prisma init --source-provider sqlite
  • 添加 model
  • 生成客戶端
  • prisma migrate dev --name init
  • npx prisma studio
  • 使用客戶端操作
  • 外額的 seed 初始化

五、小結(jié)

prisma 能提供了新的 ORM 操作數(shù)據(jù)庫(kù),cli 命令生成的內(nèi)容相對(duì)較多。熟悉之后會(huì)變得簡(jiǎn)單容易。并且提供 studio 在瀏覽器中訪問(wèn)數(shù)據(jù)庫(kù),而不需要安裝多余的客戶端,對(duì)前端友好,是輕量級(jí)全棧開(kāi)發(fā)很好選擇。

以上就是全棧輕量級(jí)搭配:Remix/Prisma/Sqlite的詳細(xì)內(nèi)容,更多關(guān)于全棧輕量級(jí)搭配:Remix/Prisma/Sqlite的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解react、redux、react-redux之間的關(guān)系

    詳解react、redux、react-redux之間的關(guān)系

    這篇文章主要介紹了詳解react、redux、react-redux之間的關(guān)系,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 詳解React Native開(kāi)源時(shí)間日期選擇器組件(react-native-datetime)

    詳解React Native開(kāi)源時(shí)間日期選擇器組件(react-native-datetime)

    本篇文章主要介紹了詳解React Native開(kāi)源時(shí)間日期選擇器組件(react-native-datetime),具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-09-09
  • React 中的 ForwardRef的使用示例詳解

    React 中的 ForwardRef的使用示例詳解

    forwardRef 相當(dāng)于是為 ref 傳遞的一種方式,普通的函數(shù)式組件就是 Render,而 fowardRef 多加了 Ref 參數(shù),這篇文章主要介紹了React 中的 ForwardRef的使用示例詳解,需要的朋友可以參考下
    2024-06-06
  • React實(shí)現(xiàn)核心Diff算法的示例代碼

    React實(shí)現(xiàn)核心Diff算法的示例代碼

    這篇文章主要為大家詳細(xì)介紹了React如何實(shí)現(xiàn)Diff算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-04-04
  • react項(xiàng)目如何使用iconfont的方法步驟

    react項(xiàng)目如何使用iconfont的方法步驟

    這篇文章主要介紹了react項(xiàng)目如何使用iconfont的方法步驟,這里介紹下如何在項(xiàng)目中配置。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • React中的useEffect(副作用)介紹

    React中的useEffect(副作用)介紹

    這篇文章主要介紹了React中的useEffect(副作用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • React?props全面詳細(xì)解析

    React?props全面詳細(xì)解析

    props?是?React?組件通信最重要的手段,它在?React?的世界中充當(dāng)?shù)慕巧鞘种匾?。學(xué)好?props?可以使組件間通信更加靈活,同時(shí)文中會(huì)介紹一些?props?的操作技巧,和學(xué)會(huì)如何編寫(xiě)嵌套組件
    2022-10-10
  • React使用setState更新數(shù)組的方法示例(追加新數(shù)據(jù))

    React使用setState更新數(shù)組的方法示例(追加新數(shù)據(jù))

    在?React?中,setState?是管理組件狀態(tài)的核心方法之一,然而,當(dāng)我們需要更新?tīng)顟B(tài)中的數(shù)組時(shí),如何高效且安全地操作變得尤為關(guān)鍵,本文將詳細(xì)解析以下代碼的實(shí)現(xiàn)邏輯,幫助你掌握在?React?中追加數(shù)組數(shù)據(jù)的最佳實(shí)踐,需要的朋友可以參考下
    2025-03-03
  • React中props驗(yàn)證不足的問(wèn)題及解決方案

    React中props驗(yàn)證不足的問(wèn)題及解決方案

    在?React?開(kāi)發(fā)中,props?是組件間通信的重要方式,通過(guò)?props,父組件可以向子組件傳遞數(shù)據(jù)和回調(diào)函數(shù),然而,如果對(duì)?props?的驗(yàn)證不足,可能會(huì)導(dǎo)致類(lèi)型錯(cuò)誤、運(yùn)行時(shí)錯(cuò)誤或難以調(diào)試的問(wèn)題,本文將探討?React?中?props?驗(yàn)證不足的常見(jiàn)問(wèn)題,并提供解決方案
    2025-03-03
  • React 源碼中的依賴注入方法

    React 源碼中的依賴注入方法

    這篇文章主要介紹了React 源碼中的依賴注入方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11

最新評(píng)論

万州区| 雷波县| 原平市| 襄城县| 历史| 成安县| 青岛市| 衡阳市| 蓬安县| 县级市| 寿光市| 阳朔县| 绥宁县| 阿荣旗| 唐山市| 崇左市| 汤原县| 米泉市| 五华县| 化隆| 崇阳县| 闵行区| 嵩明县| 石楼县| 玉山县| 双峰县| 疏勒县| 沧州市| 建昌县| 栖霞市| 松原市| 上林县| 汶川县| 横山县| 鄂托克前旗| 泰兴市| 桃江县| 英德市| 虞城县| 五莲县| 土默特左旗|