Instagramクローンコード2日目-BE
11564 ワード
#1.5 Prisma Client
クライアントはDatabaseとどのように対話していますか.
クライアントはnode modulesに存在する
node_modules/@prisma/client
typedefinitionはschemaで作成されたように手動で適用する必要があります.
必須シンボル *.prisma -> (required) String , (not required) String? typedefs.js -> (required) String! , (not required) String Movie CRUD
prisma studioはビジュアル化エディタです.
filter:lt(より小さい)、lte(より小さい)、gt(より大きい)、gte(より大きい)
#1.7 Architecture
Divide & conquer
type、query、変異をドメインから独立したファイルとして管理します.
client.js(prismaクライアントの初期化と管理)
schemaからtypeDefsと解析器をインポート
(デフォルトでは、typedefsおよび解析ファイルごとにclientをインポートする必要があります)
graphql-toolsを使用してフォルダ構造からすべてのtypedefsと解析器ファイルを読み込みます. filenameは、現在実行中のファイルパス です. dirnameは現在実行中のフォルダパスです
/**/*.typeDefs.js:すべてのフォルダ内のすべての名前のtypeDefs.js
**はフォルダ、*はファイルを表します. makeExecutableSchemaを使用してtypedefと解析器を1つのモードとして定義します.
loadfilessyncは、各ファイルのexport defaultを読み込みます.
#1.8 Dotenv
appではtop上でdotnvを実行する必要があります.
require('dotenv').config();
process.env.#### 環境変数アクセス
.gitignoreでは、アップロードされたファイルを除いてexplorerでグレーでシェーディングされます.
クライアントはDatabaseとどのように対話していますか.
クライアントはnode modulesに存在する
node_modules/@prisma/client
typedefinitionはschemaで作成されたように手動で適用する必要があります.
必須シンボル
// server.js
import { PrismaClient } from "@prisma/client";
import { ApolloServer, gql } from "apollo-server";
const client = new PrismaClient();
const typeDefs = gql`
type Movie{
id: Int!
title: String!
year: Int!
genre: String
createdAt: String!
updatedAt: String!
}
type Query{
movies: [Movie]
movie(id: Int!): Movie
}
type Mutation{
createMovie(title: String! year: Int! genre: String): Movie!
deleteMovie(id: Int!): Movie
updateMovie(id: Int! year: Int): Movie
}
`;
const resolvers = {
Query: {
movies: () => client.movie.findMany(),
movie: (_, { id }) => client.movie.findUnique({ where: { id }, }),
},
Mutation: {
createMovie: (_, { title, year, genre }) =>
client.movie.create({
data: {
title,
year,
genre
},
}),
deleteMovie: (_, { id }) =>
client.movie.delete({ where: { id }, }),
updateMovie: (_, { id, year }) =>
client.movie.update({ where: { id }, data: { year }, }),
},
};
#1.6 Prisma studioprisma studioはビジュアル化エディタです.
npx prisma studio
prisma studio is a visual editor for the data. (default port : 5555)filter:lt(より小さい)、lte(より小さい)、gt(より大きい)、gte(より大きい)
#1.7 Architecture
Divide & conquer
type、query、変異をドメインから独立したファイルとして管理します.
client.js(prismaクライアントの初期化と管理)
schemaからtypeDefsと解析器をインポート
(デフォルトでは、typedefsおよび解析ファイルごとにclientをインポートする必要があります)
graphql-toolsを使用してフォルダ構造からすべてのtypedefsと解析器ファイルを読み込みます.
npm i graphql-tools
ファイルパスパターンをloadFilesSyncで定義します./**/*.typeDefs.js:すべてのフォルダ内のすべての名前のtypeDefs.js
**はフォルダ、*はファイルを表します.
loadfilessyncは、各ファイルのexport defaultを読み込みます.
// schema.js
import { loadFilesSync, makeExecutableSchema, mergeResolvers, mergeTypeDefs, } from "graphql-tools";
const loadTypes = loadFilesSync(`${__dirname}/**/*.typeDefs.js`);
const loadReslovers = loadFilesSync(`${__dirname}/**/*.{queries,mutations}.js`);
//queries와 mutations사이에 절대 공백이 들어와서는 안된다.
const typeDefs = mergeTypeDefs(loadTypes);
const resolvers = mergeResolvers(loadReslovers);
const schema = makeExecutableSchema({ typeDefs, resolvers });
export default schema;
import client from "../client";
import { client } from "../client";
importではカッコの違いがあります.以上の場合、default exportのみがインポートされます.ただし、下図に示すように、clientというdefault exportのないモジュールの特定のメンバーがインポートされた場合は、モジュールをインポートします.したがって、以下の場合は未定義です.#1.8 Dotenv
npm install dotenv
.envを読むにはdotvnvをインストールする必要があります.appではtop上でdotnvを実行する必要があります.
require('dotenv').config();
process.env.#### 環境変数アクセス
.gitignoreでは、アップロードされたファイルを除いてexplorerでグレーでシェーディングされます.
Reference
この問題について(Instagramクローンコード2日目-BE), 我々は、より多くの情報をここで見つけました https://velog.io/@pjoon357/인스타-클론코딩-2일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol