目次
キーテイクアウト
​​
監視Apollo StudioやNew Relicなどのサービスを使用してGraphQLサーバーを実行できます。これらのサービスは、応答時間、エラー率、使用統計など、サーバーのパフォーマンスに関する洞察を提供します。また、サーバーに問題がある場合に警告することもできます。
graphQl-uploadなどのライブラリを使用してファイルアップロードを実行できます。このライブラリは、スキーマで使用できるGraphQluploadスカラーと、アップロードされたファイルを処理するためにミドルウェアで使用できるプロセスリクエスト関数を提供します。 GraphQLのサブスクリプションを使用すると、クライアントにリアルタイムで更新をプッシュできます。 Subscriptions-Transport-WSなどのライブラリを使用して、サブスクリプションのWebSocket接続を処理できます。スキーマのサブスクリプションタイプを定義し、pubsub.publish and pubsub.subscribeメソッドを使用して、イベントを公開および購読することができます。
ホームページ ウェブフロントエンド jsチュートリアル node.jsとmongodbを使用してGraphQL Serverを作成します

node.jsとmongodbを使用してGraphQL Serverを作成します

Feb 18, 2025 am 10:37 AM

node.jsとmongodbを使用してGraphQL Serverを作成します

キーテイクアウト

  • node.jsとExpressを使用してサーバーを確立し、Mongodbをデータ管理のためにMongooseと統合し、クエリと突然変異を効率的に処理するサーバーの能力を高めます。 Express-GraphQLミドルウェアを使用してサーバーにGraphQLを実装します。これにより、ユーザーフレンドリーなJSON形式の作成に重点を置いて、HTTPリクエストの処理とJSON応答の出力を簡素化します。
  • データインタラクションを正確に管理するためのタイプ、クエリ、および突然変異で構成されるGraphQLスキーマを定義し、データ構造が一貫性とセキュリティのためにMongoDBモデルと整列することを保証します。 GraphQLクエリを使用して単一のHTTP要求で特定のデータフィールドを取得することにより、データ検索を最適化し、特にネットワーク接続が遅いモバイルデバイスで転送されるデータの量を大幅に削減し、パフォーマンスを改善します。
  • Postmanなどのツールを使用してGraphQLエンドポイントをテストして、クエリと突然変異のセットアップと機能を検証し、サーバーがさまざまなデータ要求に正しく効率的に応答するようにします。
  • この記事は、ライアン・チェンキーによって査読されました。 SetePointコンテンツを最高にするためにSitePointのピアレビュアーのすべてに感謝します! クライアント側のサーバーからデータを要求することは、新しい概念ではありません。これにより、アプリケーションはページを更新せずにデータをロードできます。これは、サーバーからレンダリングされたページを取得する代わりに、クライアント側にレンダリングするために必要なデータのみを要求する単一ページアプリケーションで最も使用されています。
  • 過去数年間でWeb全体で最も一般的なアプローチは、REST Architectural Styleです。ただし、このアプローチは、高いデータ需要アプリケーションにいくつかの制限をもたらします。 RESTFULシステムでは、複数のHTTP要求を行い、必要なすべてのデータを取得する必要があります。これには、パフォーマンスに大きな影響があります。単一のHTTPリクエストで複数のリソースを要求する方法があった場合はどうなりますか?
  • クライアント側とサーバー側の間の通信を統合するクエリ言語であるGraphQLの導入。クライアント側は、単一のリクエストで、必要なデータを正確に説明できます。 この記事では、すべてのクエリと突然変異を処理するGraphQLルートを備えたnode.js/Expressサーバーを作成します。次に、いくつかの投稿リクエストを送信してこのルートをテストし、郵便配達員を使用して結果を分析します。
  • このアプリケーションの完全なソースコードをここで見つけることができます。また、ここからダウンロードできる郵便配達員コレクションも作成しました。 ExpressサーバーでGraphQLエンドポイントを設定します

最初に行うことは、Expressフレームワークを使用してnode.jsサーバーを作成することです。また、MongodbとMongooseを使用してデータの持続性を使用し、BabelはES6を使用します。コードは実行時にES5に輸送されるため、ビルドプロセスは必要ありません。これはindex.js:で行われます

<span>// index.js
</span><span>require('babel/register');
</span><span>require('./app');
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この記事のコンテキストでは、上記のコードの最も相対的な部分は、GraphQLルートを定義する場所です。 FacebookのGraphQLチームによって開発されたExpress MiddlewareであるExpress-GraphQLを使用しています。これにより、GraphQLを介してHTTP要求を処理し、JSON応答を返します。これを機能させるには、次のセクションで説明するGraphQLスキーマのオプションを通過する必要があります。また、オプションをかなり真実に設定しています。これにより、JSONの応答がきれいに印刷され、読みやすくなります。

graphql schema
<span>// app.js
</span><span>import express from 'express';
</span><span>import graphqlHTTP from 'express-graphql';
</span><span>import mongoose from 'mongoose';
</span>
<span>import schema from './graphql';
</span>
<span>var app = express();
</span>
<span>// GraphqQL server route
</span>app<span>.use('/graphql', graphqlHTTP(req => ({
</span>  schema<span>,
</span>  <span>pretty: true
</span><span>})));
</span>
<span>// Connect mongo database
</span>mongoose<span>.connect('mongodb://localhost/graphql');
</span>
<span>// start server
</span><span>var server = app.listen(8080, () => {
</span>  <span>console.log('Listening at port', server.address().port);
</span><span>});
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

GraphQLがリクエストを理解するには、スキーマを定義する必要があります。そして、GraphQLスキーマは、クエリと突然変異のグループに他なりません。クエリは、データベースから取得して、データベースへのあらゆる種類の更新として変異を取得するためのリソースと考えることができます。例として、ブログポストとコメントマングースモデルを作成し、その後、いくつかのクエリと突然変異を作成します。

mongooseモデル

Mongooseモデルを作成することから始めましょう。 Mongooseはこの記事の焦点では​​ないため、ここではあまり詳しく説明しません。モデル/blog-post.jsとmodels/comment.jsで2つのモデルを見つけることができます。

graphqlタイプ

Mongooseのように、GraphQlではデータ構造を定義する必要があります。違いは、クエリと突然変異ごとに定義し、どのタイプのデータが入力できるか、応答で送信されるものを定義することです。これらのタイプが一致しない場合、エラーがスローされます。冗長に見えるかもしれませんが、マングースでスキーマモデルをすでに定義しているため、次のような大きな利点があります。

あなたは許可されているものを制御します。これにより、システムセキュリティが向上します許可されているものを制御します。これは、特定のフィールドを定義して、取得することを許可されないことを意味します。たとえば、パスワードまたはその他の機密データ

それは無効な要求をフィルタリングして、それ以上の処理が行われないようにし、サーバーのパフォーマンスを改善できる

    GraphQLタイプのソースコードをGRAPHQL/TYPES/で見つけることができます。次の例は次のとおりです
  • ここでは、ブログ投稿出力GraphQLタイプを定義しています。これは、クエリと突然変異を作成するときにさらに使用します。構造がMongoose Model blogpostに似ていることに注意してください。それは仕事の複製のように見えるかもしれませんが、これらは分離された懸念です。 Mongooseモデルはデータベースのデータ構造を定義します。GraphQLタイプは、サーバーのクエリまたは変異で受け入れられているもののルールを定義します。
  • GraphQl Schema Creation
  • Mongooseモデルと作成されたGraphQLタイプを使用して、GraphQLスキーマを作成できるようになりました。
ここでは、クエリと突然変異という2つの特性を定義するGraphQlschemaをエクスポートします。 GraphQlobjectTypeは、多くのGraphQLタイプの1つです。特にこれを使用すると、次の指定できます
  • 名前 - これは一意であり、オブジェクトを識別する必要があります;
  • フィールド - この場合よりもオブジェクトを受け入れるプロパティは、私たちのクエリと突然変異になります。
別の場所からクエリと突然変異をインポートしていますが、これは構造目的のみを目的としています。ソースコードは、モデル、クエリ、突然変異などを追加したい場合に、プロジェクトが適切にスケーリングできるようにする方法で構成されています。

フィールドに通過するクエリと変異変数は、単純なJavaScriptオブジェクトです。キーは、突然変異名またはクエリ名です。値は、GraphQLにそれらをどうするかを伝える構成を備えた単純なJavaScriptオブジェクトです。次のGraphQLクエリを例として見てみましょう

grahpqlについては、このクエリで何をすべきかを理解するには、ブログ投稿とコメントクエリを定義する必要があります。したがって、私たちのクエリ変数は次のようなものになります:

<span>// index.js
</span><span>require('babel/register');
</span><span>require('./app');
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

変異についても同じことが言えます。これは、クエリまたは突然変異にあるキーとクエリに入れた名前の間に直接的な関係があることを説明するためです。次に、これらのクエリと突然変異のそれぞれがどのように定義されているかを見てみましょう。

<span>// app.js
</span><span>import express from 'express';
</span><span>import graphqlHTTP from 'express-graphql';
</span><span>import mongoose from 'mongoose';
</span>
<span>import schema from './graphql';
</span>
<span>var app = express();
</span>
<span>// GraphqQL server route
</span>app<span>.use('/graphql', graphqlHTTP(req => ({
</span>  schema<span>,
</span>  <span>pretty: true
</span><span>})));
</span>
<span>// Connect mongo database
</span>mongoose<span>.connect('mongodb://localhost/graphql');
</span>
<span>// start server
</span><span>var server = app.listen(8080, () => {
</span>  <span>console.log('Listening at port', server.address().port);
</span><span>});
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
queries

クエリから始めて、これまでに作成したモデルを使用して、例からピックアップしましょう。良い例は、ブログ投稿とそのすべてのコメントを取得することです。

休憩ソリューションでは、これに対して2つのHTTPリクエストを行う必要があります。 1つはブログ投稿を取得し、もう1つはコメントを取得するために、これは次のようになります。

graphqlでは、次のクエリを使用して、1つのHTTPリクエストでのみこれを作成できます。

1つのリクエストで必要なすべてのデータを取得できます。これだけでパフォーマンスが向上します。また、使用する正確なプロパティを要求することもできます。上記の例では、応答はブログ投稿のタイトルと説明のみをもたらすだけであり、コメントはテキストのみをもたらすだけです。

各リソースから必要なフィールドのみを取得すると、Webページまたはアプリケーションの読み込み時間に大きな影響を与える可能性があります。たとえば、コメントを見てみましょう。コメントには、_idとpostidプロパティもあります。これらのそれぞれは、それぞれ正確には12バイトで、12バイトです(オブジェクトキーではカウントされません)。これは、単一またはいくつかのコメントである場合、ほとんど影響を与えません。たとえば、200のコメントについて話しているとき、それは4800バイトを超えていません。そして、それはアプリケーションの読み込み時間に大きな違いをもたらす可能性があります。これは、通常、ネットワーク接続が遅いモバイルのリソースなど、リソースが限られているデバイスにとって特に重要です。 これが機能するためには、特定のクエリごとにデータを取得する方法をGraphQLに伝える必要があります。クエリ定義の例を見てみましょう:
<span>// graphql/types/blog-post.js
</span><span>import <span>{
</span></span><span>  <span>GraphQLObjectType,
</span></span><span>  <span>GraphQLNonNull,
</span></span><span>  <span>GraphQLString,
</span></span><span>  <span>GraphQLID
</span></span><span><span>}</span> from 'graphql';
</span>
<span>export default new GraphQLObjectType({
</span>  <span>name: 'BlogPost',
</span>  <span>fields: {
</span>    <span>_id: {
</span>      <span>type: new GraphQLNonNull(GraphQLID)
</span>    <span>},
</span>    <span>title: {
</span>      <span>type: GraphQLString
</span>    <span>},
</span>    <span>description: {
</span>      <span>type: GraphQLString
</span>    <span>}
</span>  <span>}
</span><span>});
</span>
ログイン後にコピー
ログイン後にコピー
<span>// index.js
</span><span>require('babel/register');
</span><span>require('./app');
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ここでは、IDパラメーターに基づいて単一のブログ投稿を取得するクエリを作成しています。クエリの出力を検証する以前に作成したタイプを指定していることに注意してください。また、このクエリに必要なargumentsを使用してARGSオブジェクトを設定しています。そして最後に、データベースを照会してデータを返す解決関数。

データの取得プロセスをさらに最適化し、MongoDBの投影機能を活用するために、GraphQLがMongooseと互換性のある投影を生成するために提供するASTを処理しています。したがって、次のクエリを作成した場合:

<span>// app.js
</span><span>import express from 'express';
</span><span>import graphqlHTTP from 'express-graphql';
</span><span>import mongoose from 'mongoose';
</span>
<span>import schema from './graphql';
</span>
<span>var app = express();
</span>
<span>// GraphqQL server route
</span>app<span>.use('/graphql', graphqlHTTP(req => ({
</span>  schema<span>,
</span>  <span>pretty: true
</span><span>})));
</span>
<span>// Connect mongo database
</span>mongoose<span>.connect('mongodb://localhost/graphql');
</span>
<span>// start server
</span><span>var server = app.listen(8080, () => {
</span>  <span>console.log('Listening at port', server.address().port);
</span><span>});
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
データベースからタイトルと説明を取得するだけであるため、getProjection関数はマングースの有効な投影を生成します:

<span>// graphql/types/blog-post.js
</span><span>import <span>{
</span></span><span>  <span>GraphQLObjectType,
</span></span><span>  <span>GraphQLNonNull,
</span></span><span>  <span>GraphQLString,
</span></span><span>  <span>GraphQLID
</span></span><span><span>}</span> from 'graphql';
</span>
<span>export default new GraphQLObjectType({
</span>  <span>name: 'BlogPost',
</span>  <span>fields: {
</span>    <span>_id: {
</span>      <span>type: new GraphQLNonNull(GraphQLID)
</span>    <span>},
</span>    <span>title: {
</span>      <span>type: GraphQLString
</span>    <span>},
</span>    <span>description: {
</span>      <span>type: GraphQLString
</span>    <span>}
</span>  <span>}
</span><span>});
</span>
ログイン後にコピー
ログイン後にコピー
ソースコードでGraphQL/Queries/*で他のクエリを見ることができます。上記の例に似ているので、それぞれを通過しません。

突然変異

変異は、データベースの何らかの変化を処理する操作です。クエリと同様に、単一のHTTP要求に異なる変異をグループ化できます。通常、「コメントを追加」や「ブログ投稿の作成」など、アクションが隔離されます。ただし、アプリケーションとデータ収集の複雑さが高まり、分析、ユーザーエクスペリエンステスト、または複雑な操作を対象としていますが、ウェブサイトまたはアプリケーションでのユーザーアクションは、データベースの異なるリソースにかなりの数の変異をトリガーできます。この例に従って、ブログ投稿の新しいコメントは、新しいコメントとブログ投稿のコメントカウントの更新を意味する場合があります。休憩ソリューションでは、次のようなものがあります。

graphqlを使用すると、次のようなものを使用して1つのHTTPリクエストでのみ実行できます。
<span>// graphql/index.js
</span><span>import <span>{
</span></span><span>  <span>GraphQLObjectType,
</span></span><span>  <span>GraphQLSchema
</span></span><span><span>}</span> from 'graphql';
</span>
<span>import mutations from './mutations';
</span><span>import queries from './queries';
</span>
<span>export default new GraphQLSchema({
</span>  <span>query: new GraphQLObjectType({
</span>    <span>name: 'Query',
</span>    <span>fields: queries
</span>  <span>}),
</span>  <span>mutation: new GraphQLObjectType({
</span>    <span>name: 'Mutation',
</span>    <span>fields: mutations
</span>  <span>})
</span><span>});
</span>
ログイン後にコピー

クエリと突然変異の構文はまったく同じであり、突然変異にクエリを変更するだけであることに注意してください。 クエリから行うのと同じように、突然変異からデータを尋ねることができます。 BlogPostCommentINCの上記のクエリにあるように、フラグメントを指定しないことで、操作を確認するのに十分な場合が多い真または誤った返品値を求めています。または、AddComment変異のようなデータを要求することもできます。これは、サーバーで生成されたデータのみを取得するのに役立ちます。

次に、サーバーの突然変異を定義しましょう。突然変異は、クエリとして正確に作成されます:
query <span>{
</span>    blogPosts <span>{
</span>        _id<span>,
</span>        title
    <span>}
</span>    comments <span>{
</span>        text   
    <span>}
</span><span>}
</span>
ログイン後にコピー

この突然変異は、新しいブログ投稿を追加し、成功した場合にtrueを返します。タイプで、どのように返されるかを指定する方法に注意してください。 ARGSでは、突然変異から受けた議論。クエリ定義のように、Resolve()機能。 GraphQLエンドポイントのテスト

<span>{
</span>    <span>blogPosts: {...},
</span>    <span>comments: {...}
</span><span>}
</span>
ログイン後にコピー
グラフQLルートといくつかのクエリと突然変異を備えたExpressサーバーを作成したので、いくつかのリクエストを送信してテストしましょう。

次のような場所にGet Requestを送信または投稿する方法はたくさんあります。

  • ブラウザ - ブラウザにURLを入力することにより、GETリクエストを送信します。これには、投稿リクエストを送信できないという制限があります
  • curl - コマンドラインファン向け。あらゆる種類のリクエストをサーバーに送信できます。それは最高のインターフェイスではありませんが、リクエストを保存することはできず、コマンドラインにすべてを書く必要があります。
  • graphiql - graphqlに最適なソリューション。これは、サーバーにクエリを作成するために使用できるブラウザIDEです。次のような素晴らしい機能があります:構文の強調表示と先にタイプ
上記のソリューションよりも多くのソリューションがあります。最初の2つは最も知られているものと使用済みのものです。 GraphiQLは、クエリを書くのがより複雑になる可能性があるため、GraphQLチームのプロセスを簡素化するためのGraphQLチームのソリューションです。

これらの3つからGraphiQLをお勧めしますが、何よりも郵便配達員よりもお勧めします。このツールは間違いなくAPIテストの進歩です。あらゆるタイプのリクエストのコレクションを作成および保存できる直感的なインターフェイスを提供します。 APIのテストを作成して、ボタンをクリックして実行することもできます。また、共同機能があり、リクエストのコレクションを共有できます。そこで、ここからダウンロードできるものを作成しました。これを郵便配達員にインポートできます。郵便配達員がインストールされていない場合は、絶対にお勧めします。

サーバーを実行することから始めましょう。ノード4以下をインストールする必要があります。そうでない場合は、NVMを使用してインストールすることをお勧めします。その後、コマンドラインで以下を実行できます:

サーバーはリクエストを受信する準備ができたので、郵便配達員にいくつかを作成しましょう。 GraphQLルートは/graphQlに設定されているため、最初に行うことは、http:// localhost:8080/graphqlのリクエストを指示する場所に場所を設定することです。次に、GETまたはPOSTリクエストのかどうかを指定する必要があります。これらのいずれかを使用できますが、URLに影響を与えずにクリーナーにするため、投稿を好みます。また、リクエストに伴うヘッダーを構成する必要があります。この場合、Application/JSONに等しいコンテンツタイプを追加するだけです。ポストマンですべてのセットアップのように見える方法は次のとおりです
<span>// index.js
</span><span>require('babel/register');
</span><span>require('./app');
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

以下のようなJSON形式で必要なGraphQLクエリと変数を持つボディを作成できるようになりました。 node.jsとmongodbを使用してGraphQL Serverを作成します

私が提供したコレクションをインポートしたと仮定すると、テストできるクエリと突然変異のリクエストが既にあるはずです。ハードコーディングされたMongo IDを使用しているため、リクエストを順番に実行すると、すべて成功する必要があります。私がそれぞれの体に入れたものを分析すると、この記事で議論されているものの単なるアプリケーションであることがわかります。また、最初のリクエストを複数回実行すると、複製IDになるため、エラーの返された方法がわかります。

node.jsとmongodbを使用してGraphQL Serverを作成します

結論

この記事では、GraphQLの可能性と、それがRESTアーキテクチャスタイルとどのように異なるかを紹介しました。この新しいクエリ言語は、Webに大きな影響を与えるように設定されています。特に、より複雑なデータアプリケーションでは、必要なデータを正確に説明し、単一のHTTPリクエストでリクエストできるようになりました。

私はあなたから聞いてみたいです:あなたはGraphQLについてどう思いますか、そしてそれであなたの経験は何でしたか? node.jsとmongodbを使用してGraphQL Serverを作成することに関するよくある質問 GraphQL Server用のMongoDBデータベースを設定するにはどうすればよいですか?

GraphQL ServerのMongoDBデータベースをセットアップするには、いくつかのステップが含まれます。まず、Mongodbをローカルマシンにインストールするか、Mongodb AtlasのようなクラウドベースのMongodbサービスを使用する必要があります。インストールしたら、新しいデータベースとコレクションを作成できます。その後、MongooseのようなMongoDBクライアントを使用して、node.jsアプリケーションからこのデータベースに接続できます。 Mongooseを使用すると、コレクションのスキーマを定義でき、データをクエリして操作する方法を提供します。あなたのデータとあなたがそれを実行できる操作。 node.jsアプリケーションでは、GraphQLライブラリを使用してGraphQLスキーマを定義できます。これには、データのタイプ、各タイプのフィールド、およびこれらのタイプで実行できるクエリと突然変異を定義することが含まれます。このタイプは、MongoDBコレクションのドキュメントの構造と一致する必要があります。

GraphQLサーバーのエラーを処理するにはどうすればよいですか? Apollo Serverによる。この関数は、エラーがリゾルバーにスローされるたびに呼び出されます。引数としてエラーを受信し、エラーオブジェクトを返す必要があります。このオブジェクトには、メッセージ、ステータスコード、およびその他の関連情報を含めることができます。リゾルバーのトライ/キャッチブロックを使用して、エラーをキャッチして処理することもできます。パフォーマンスのためにGraphQLサーバーを最適化するにはどうすればよいですか?

​​

パフォーマンスのためにGraphQLサーバーを最適化する方法はいくつかあります。 1つの方法は、Dataloaderのようなライブラリでバッチとキャッシュを使用することです。これにより、MongoDBデータベースへのリクエストの数を減らし、応答時間を改善できます。別の方法は、永続的なクエリを使用することです。これにより、サーバーに送信されるリクエストのサイズが縮小できます。 Apollo Studioなどの監視ツールを使用して、パフォーマンスボトルネックを識別および修正することもできます。まず、HTTPSを使用して、クライアントとサーバー間の通信を暗号化する必要があります。ヘルメットなどのライブラリを使用して、HTTP応答にセキュリティヘッダーを追加することもできます。認証には、JSON Web Tokens(JWT)を使用し、承認のためにGraphQL-Shieldなどのライブラリを使用できます。また、インジェクション攻撃を防ぐためにユーザー入力を検証して消毒する必要があります。

GraphQLサーバーをテストするにはどうすればよいですか?エンドツーエンドテスト。 Jestのようなライブラリを使用して、テストを作成し、SuperTestのようなライブラリを使用して、HTTPリクエストをサーバーに作成できます。リソースバー、スキーマ、およびmongoDBクエリと突然変異をテストする必要があります。

GraphQLサーバーを展開するにはどうすればよいですか? AWS、またはGoogleクラウド。また、展開プロセスを自動化するために、継続的な統合と継続的な展開(CI/CD)パイプラインを設定する必要があります。これは、GitHub ActionsやJenkinsなどのサービスを使用して実行できます。

graphqlサーバーを監視するにはどうすればよいですか?

​​

監視Apollo StudioやNew Relicなどのサービスを使用してGraphQLサーバーを実行できます。これらのサービスは、応答時間、エラー率、使用統計など、サーバーのパフォーマンスに関する洞察を提供します。また、サーバーに問題がある場合に警告することもできます。

graphqlを使用してファイルアップロードを処理するにはどうすればよいですか?

graphQl-uploadなどのライブラリを使用してファイルアップロードを実行できます。このライブラリは、スキーマで使用できるGraphQluploadスカラーと、アップロードされたファイルを処理するためにミドルウェアで使用できるプロセスリクエスト関数を提供します。 GraphQLのサブスクリプションを使用すると、クライアントにリアルタイムで更新をプッシュできます。 Subscriptions-Transport-WSなどのライブラリを使用して、サブスクリプションのWebSocket接続を処理できます。スキーマのサブスクリプションタイプを定義し、pubsub.publish and pubsub.subscribeメソッドを使用して、イベントを公開および購読することができます。

以上がnode.jsとmongodbを使用してGraphQL Serverを作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

JavaScriptは学ぶのが難しいですか? JavaScriptは学ぶのが難しいですか? Apr 03, 2025 am 12:20 AM

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は?
または:
Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は? または: Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Apr 04, 2025 pm 05:36 PM

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptの進化:現在の傾向と将来の見通し JavaScriptの進化:現在の傾向と将来の見通し Apr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

See all articles