簡體   English   中英

使用種子文件將JSON文件中的數據添加到Prisma數據庫

[英]Add data from a JSON file to the Prisma database with a seed file

我想用JSON文件中的一些數據為我的數據庫建立種子

//continent-data.json
[
  {
    "continent": "far east",
    "imageURL": "#"
  },
  {
    "continent": "ASIA",
    "imageURL": "#"
  },
]

這是我的seed.js文件

//seed.js
const dotenv = require('dotenv');
const { Prisma } = require('./src/generated/prisma-client');
const continentData = require('./continent-data.json');

dotenv.config();

const db = new Prisma({
  secret: process.env.PRISMA_SECRET,
  endpoint: process.env.PRISMA_ENDPOINT
});

const seedContinents = () => {
  // adding continents to the data
  Promise.all(
    continentData.map(async continentItem => {
      const { imageURL, continent } = continentItem;
      const response = await db.createContinent({
        data: {
          name: continent || 'default name',
          imageURL,
        }
      });
      return response;
    })
  );
};

seedContinents();

當我運行node seed.js
它失敗並拋出以下錯誤

UnhandledPromiseRejectionWarning:錯誤:'ContinentCreateInput!'類型的變量'$ data'預期值 但得到:{“data”:{“name”:“far east”,“imageURL”:“#”,“destination”:[]}}。 原因:'name'預期的非null值,找到null。

我相信我正在以正確的格式傳遞正確的數據。 但它說name字段的值為null。 但錯誤信息本身表示名稱字段有一個字符串值“遠東”

我也提供了Prisma架構的必要部分。

在此輸入圖像描述

嘗試更改將數據提供給db.createContinent函數的方式。

 const response = await db.createContinent({
          name: continent || 'default name',
          imageURL,
      });

只傳遞數據而不是創建包裝器數據對象。

你可以把你在頂部導入的Prisma對象(Prisma客戶端)看作輔助類。 在實例化之后,您可以訪問javascript函數,這些函數主要反映了根據您的datamodel.graphql文件為您生成的Prisma Server CRUD函數。

如果查看Prisma客戶端頁面上的示例文檔,您可以看到有兩種方法可以傳遞數據以獲得相同的結果 一方面你可以調用javascript函數:

db.createContinent({
      name: continent || 'default name',
      imageURL,
  });

另一方面,您可以直接在Prisma端點上運行GraphQL查詢,

mutation {
  createContinent(data: {
    name: continent || 'default name',
    imageURL
  }) {
    name
    continent
  }
} 

第二種方法是在GraphQL操作系統中進行,並直接與數據交互。 使用Prisma客戶端自動生成的javascript函數的第一個示例是一個包裝器,只需要沒有data:object包裝器的輸入數據。 所以沒有了

data: { { ContinentCreateInput object shape }}

文檔並沒有真正詳細介紹它,我花了一段時間才想知道為什么它不適合你在GraphQL類型中指定的形狀。

第一種方法是從原始數據庫CRUD方法中抽象和保護應用程序層的推薦方法。 請參閱Prisma client

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM