Node.js と Express を使用して最初の API を作成する: データベースに接続する
Node.js と Express を使用して REST API を構築する: データベースに接続する
最初のチュートリアル「RESTful API について」では、REST アーキテクチャとは何か、HTTP 要求メソッドと応答とは何か、RESTful API エンドポイントを理解する方法について学びました。 2 番目のチュートリアル「Express API サーバーのセットアップ方法」では、Node の組み込み http
モジュールと Express フレームワークを使用してサーバーを構築する方法と、作成したアプリケーションをルーティングする方法を学びました。異なる URL エンドポイント。
現在、API エンドポイントが GET
リクエストにヒットしたときに、静的データを使用してユーザー情報を JSON ソースの形式で表示します。このチュートリアルでは、すべてのデータを保存する MySQL データベースをセットアップし、Node.js アプリケーションからデータベースに接続し、API が GET
、POST
、を使用できるようにします。 PUT
および DELETE
メソッドは完全な API を作成します。
これまでのところ、データの保存や操作にデータベースを使用したことがないので、データベースをセットアップします。このチュートリアルでは MySQL を使用します。コンピュータに MySQL がすでにインストールされている場合は、次のステップに進むことができます。
MySQL がインストールされていない場合は、無料のローカル サーバー環境とデータベースを提供する macOS および Windows 用の MAMP をダウンロードできます。ダウンロードが完了したら、プログラムを開き、「
Start Server」をクリックして MySQL を起動します。 MySQL 自体のセットアップに加えて、データベースとテーブルを表示するための GUI ソフトウェアも必要です。 Mac の場合は SequelPro を、Windows の場合は SQLyog をダウンロードしてください。 MySQL をダウンロードして実行した後、SequelPro または SQLyog を使用して、ユーザー名
root とパスワード root
を使用してポート 3306
の localhost
に接続できます。
ここですべての設定が完了したら、API 用のデータベースの設定に進むことができます。
データベースのセットアップ
データベース表示ソフトウェアで、新しいデータベースを追加し、
api という名前を付けます。 MySQL が実行されていることを確認してください。実行されていないと、localhost
に接続できなくなります。
データベースを作成した後、そのデータベースに移動し、次のクエリを実行して新しいテーブルを作成します。
リーリー
この SQL クエリは、
テーブルの構造を作成します。各ユーザーは、自動で増加する ID、名前、および電子メール アドレスを持ちます。
クエリを実行することで、現在表示されているのと同じデータを静的 JSON 配列経由でデータベースに入力することもできます。
リーリー
フィールドは自動でインクリメントされるため、入力する必要はありません。この時点で、テーブルの構造と操作するサンプル データがいくつかあります。
MySQL に接続します
アプリケーションに戻り、データの処理を開始するには、Node.js から MySQL に接続する必要があります。以前に
mysql npm モジュールをインストールしましたが、今度はそれを使用したいと思います。
という新しいディレクトリを作成し、config.js ファイルを作成します。 まず、
data/config.js に mysql モジュールが必要です。
リーリー
ホスト、ユーザー、パスワード、データベースを含む
オブジェクトを作成しましょう。これは、作成した api
データベースを参照し、デフォルトの localhost 設定を使用する必要があります。
リーリー
効率を向上させるために、手動で複数の接続を開いたり閉じたりすることなく、一度に複数の接続を使用できるようにする MySQL プールを作成します。
最後に、アプリケーションが使用できるように MySQL プールをエクスポートします。
リーリーGitHub リポジトリで完全なデータベース構成ファイルを表示できます。
これで MySQL に接続し、セットアップが完了したので、API を介してデータベースとの対話を続けることができます。
MySQL から API データを取得する
現在、
routes.js ファイルは、以下に示すようにユーザーの JSON 配列を手動で作成しています。
リーリー
静的データはもう使用していないので、配列全体を削除して、MySQL プールへのリンクに置き換えることができます。
以前は、
/users パスの GET
は静的 users
データを送信していました。更新されたコードは、代わりにデータベースにこのデータをクエリします。以下に示すように、users
テーブルから SQL クエリ SELECT
を使用します。
リーリー
これは、
メソッドを使用して、新しい /users
がルートを取得する様子です。
リーリー
ここでは、
クエリを実行し、結果を /users
エンドポイント経由で JSON としてクライアントに送信します。サーバーを再起動し、/users
ページに移動すると、以前と同じデータが表示されますが、現在は動的になっています。
<h2 id="使用-URL-参数">使用 URL 参数</h2>
<p>到目前为止,我们的端点都是静态路径 - <code>/
root 或 /users
- 但是当我们只想查看有关特定用户的数据时该怎么办?我们需要使用可变端点。
对于我们的用户,我们可能希望根据每个用户的唯一 ID 检索有关每个用户的信息。为此,我们将使用冒号 (:
) 来表示它是一个路由参数。
// Display a single user by ID app.get('/users/:id', (request, response) => { ... }); });
我们可以使用 request.params
属性检索此路径的参数。由于我们的名称为 id
,因此我们将这样引用它。
const id = request.params.id;
现在,我们将在 SELECT
语句中添加 WHERE
子句,以仅获取具有指定 id
的结果。
我们将使用 ?
作为占位符以避免 SQL 注入,并将 id 作为参数传递,而不是构建一个连接字符串,这会降低安全性。
pool.query('SELECT * FROM users WHERE id = ?', id, (error, result) => { if (error) throw error; response.send(result); });
我们个人用户资源的完整代码现在如下所示:
// Display a single user by ID app.get('/users/:id', (request, response) => { const id = request.params.id; pool.query('SELECT * FROM users WHERE id = ?', id, (error, result) => { if (error) throw error; response.send(result); }); });
现在您可以重新启动服务器并导航到 https://localhost/users/2
以仅查看 Gilfoyle 的信息。如果出现 Cannot GET /users/2
之类的错误,则说明您需要重新启动服务器。
访问此 URL 应返回一个结果。
[{ id: 2, name: "Bertram Gilfoyle", email: "gilfoyle@piedpiper.com" }]
如果您看到的是这样的内容,那么恭喜您:您已成功设置动态路由参数!
发送 POST 请求
到目前为止,我们所做的一切都使用了 GET
请求。这些请求是安全的,这意味着它们不会改变服务器的状态。我们只是查看 JSON 数据。
现在我们将开始通过使用 POST
请求添加新数据来使 API 真正动态化。
我之前在理解 REST 文章中提到,我们不会在 URL 中使用 add
或 delete
等动词来执行操作。为了向数据库添加新用户,我们将 POST
到我们查看它们的同一 URL,但只需为其设置一个单独的路由。
// Add a new user app.post('/users', (request, response) => { ... });
请注意,我们现在使用 app.post()
而不是 app.get()
。
由于我们是创建而不是读取,因此我们将在此处使用 INSERT
查询,就像我们在数据库初始化时所做的那样。我们将整个 request.body
发送到 SQL 查询。
pool.query('INSERT INTO users SET ?', request.body, (error, result) => { if (error) throw error;
我们还将指定响应的状态为 201
,它代表 Created
。为了获取最后插入的项目的 id,我们将使用 insertId
属性。
response.status(201).send(`User added with ID: ${result.insertId}`);
我们的整个 POST
接收代码将如下所示。
// Add a new user app.post('/users', (request, response) => { pool.query('INSERT INTO users SET ?', request.body, (error, result) => { if (error) throw error; response.status(201).send(`User added with ID: ${result.insertId}`); }); });
现在我们可以通过发送一个 POST
请求了。大多数情况下,当您发送 POST
请求时,您是通过 Web 表单执行的。我们将在本文末尾学习如何进行设置,但发送测试 POST
的最快、最简单的方法是使用 cURL,使用 -d (--data)
标志。
我们将运行 curl -d
,后跟包含所有键/值对和请求端点的查询字符串。
curl -d "name=Dinesh Chugtai&email=dinesh@piedpiper.com" http://localhost:3002/users
发送此请求后,您应该会从服务器收到响应。
User added with ID: 3
如果您导航到 http://localhost/users
,您将看到添加到列表中的最新条目。
发送 PUT 请求
POST
对于添加新用户很有用,但我们希望使用 PUT
来修改现有用户。 PUT
是幂等的,这意味着您可以多次发送相同的请求,并且只会执行一个操作。这与 POST
不同,因为如果我们多次发送新用户请求,它会不断创建新用户。
对于我们的 API,我们将设置 PUT
以便能够处理编辑单个用户,因此这次我们将使用 :id
路由参数。
让我们创建一个 UPDATE
查询,并确保它仅适用于带有 WHERE
子句的请求 ID。我们使用两个 ?
占位符,我们传递的值将按顺序排列。
// Update an existing user app.put('/users/:id', (request, response) => { const id = request.params.id; pool.query('UPDATE users SET ? WHERE id = ?', [request.body, id], (error, result) => { if (error) throw error; response.send('User updated successfully.'); }); });
在我们的测试中,我们将编辑用户 2
并将电子邮件地址从 gilfoyle@piedpiper.com 更新为 bertram@piedpiper.com。我们可以再次使用 cURL,并使用 [-X (--request)]
标志来明确指定我们要通过其发送 PUT 请求。
curl -X PUT -d "name=Bertram Gilfoyle" -d "email=bertram@piedpiper.com" http://localhost:3002/users/2
请确保在发送请求之前重新启动服务器,否则您将收到 Cannot PUT /users/2
错误。
你应该看到这个:
User updated successfully.
现在应该更新 ID 为 2
的用户数据。
发送删除请求
我们完成 API 的 CRUD 功能的最后一个任务是选择从数据库中删除用户。此请求将使用 DELETE
SQL 查询和 WHERE
,并且它将删除由路由参数指定的单个用户。
// Delete a user app.delete('/users/:id', (request, response) => { const id = request.params.id; pool.query('DELETE FROM users WHERE id = ?', id, (error, result) => { if (error) throw error; response.send('User deleted.'); }); });
我们可以再次使用 -X
和 cURL 来发送删除。让我们删除我们创建的最新用户。
curl -X DELETE http://localhost:3002/users/3
您将看到成功消息。
User deleted.
导航到 http://localhost:3002
,您会看到现在只有两个用户。
恭喜!至此,API就完成了。访问 GitHub 存储库以查看 routes.js 的完整代码。
通过request
模块发送请求
在本文的开头,我们安装了四个依赖项,其中之一是 request
模块。您可以创建一个包含所有数据的新文件并将其发送,而不是使用 cURL 请求。我将创建一个名为 post.js 的文件,该文件将通过 POST
创建一个新用户。
const request = require('request'); const json = { "name": "Dinesh Chugtai", "email": "dinesh@piedpiper.com", }; request.post({ url: 'http://localhost:3002/users', body: json, json: true, }, function (error, response, body) { console.log(body); });
我们可以在服务器运行时在新的终端窗口中使用 node post.js
来调用它,它与使用 cURL 具有相同的效果。如果 cURL 出现问题,request
模块很有用,因为我们可以查看错误、响应和正文。
通过 Web 表单发送请求
通常,POST
和其他改变服务器状态的 HTTP 方法是使用 HTML 表单发送的。在这个非常简单的示例中,我们可以在任何地方创建一个 index.html 文件,并为姓名和电子邮件地址创建一个字段。表单的操作将指向资源,在本例中为 http//localhost:3002/users
,我们将方法指定为 post
。
创建index.html并向其中添加以下代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Node.js Express REST API</title> </head> <body> <form action="http://localhost:3002/users" method="post"> <label for="name">Name</label> <input type="text" name="name"> <label for="email">Email</label> <input type="email" name="email"> <input type="submit"> </form> </body> </html>
在浏览器中打开此静态 HTML 文件,填写该文件,然后在服务器在终端中运行时发送它。您应该会看到 添加了 ID 为 4
的用户的响应,并且您应该能够查看新的用户列表。
结论
在本教程中,我们学习了如何将 Express 服务器连接到 MySQL 数据库,并设置与路径和动态路由的 GET
、POST
、PUT
和 DELETE
方法相对应的路由参数。我们还学习了如何使用 cURL、Node.js request
模块和 HTML 表单向 API 服务器发送 HTTP 请求。
此时,您应该非常了解 RESTful API 的工作原理,并且您现在可以使用 Express 和 MySQL 在 Node.js 中创建自己的成熟 API!
以上がNode.js と Express を使用して最初の API を作成する: データベースに接続するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Node.js は、高いパフォーマンス、スケーラビリティ、クロスプラットフォーム サポート、豊富なエコシステム、開発の容易さなどの機能を備えているため、バックエンド フレームワークとして使用できます。

MySQL データベースに接続するには、次の手順に従う必要があります。 mysql2 ドライバーをインストールします。 mysql2.createConnection() を使用して、ホスト アドレス、ポート、ユーザー名、パスワード、データベース名を含む接続オブジェクトを作成します。 connection.query() を使用してクエリを実行します。最後に connection.end() を使用して接続を終了します。

Node.js インストール ディレクトリには、npm と npm.cmd という 2 つの npm 関連ファイルがあります。違いは次のとおりです。拡張子が異なります。npm は実行可能ファイルで、npm.cmd はコマンド ウィンドウのショートカットです。 Windows ユーザー: npm.cmd はコマンド プロンプトから使用できますが、npm はコマンド ラインからのみ実行できます。互換性: npm.cmd は Windows システムに固有ですが、npm はクロスプラットフォームで使用できます。使用上の推奨事項: Windows ユーザーは npm.cmd を使用し、他のオペレーティング システムは npm を使用します。

Node.js には次のグローバル変数が存在します。 グローバル オブジェクト: グローバル コア モジュール: プロセス、コンソール、require ランタイム環境変数: __dirname、__filename、__line、__column 定数: unknown、null、NaN、Infinity、-Infinity

Node.js と Java の主な違いは、設計と機能です。 イベント駆動型とスレッド駆動型: Node.js はイベント駆動型で、Java はスレッド駆動型です。シングルスレッドとマルチスレッド: Node.js はシングルスレッドのイベント ループを使用し、Java はマルチスレッド アーキテクチャを使用します。ランタイム環境: Node.js は V8 JavaScript エンジン上で実行され、Java は JVM 上で実行されます。構文: Node.js は JavaScript 構文を使用し、Java は Java 構文を使用します。目的: Node.js は I/O 集中型のタスクに適しており、Java は大規模なエンタープライズ アプリケーションに適しています。

はい、Node.js はバックエンド開発言語です。これは、サーバー側のビジネス ロジックの処理、データベース接続の管理、API の提供などのバックエンド開発に使用されます。

Node.js プロジェクトのサーバー デプロイメント手順: デプロイメント環境を準備します。サーバー アクセスの取得、Node.js のインストール、Git リポジトリのセットアップ。アプリケーションをビルドする: npm run build を使用して、デプロイ可能なコードと依存関係を生成します。コードをサーバーにアップロードします: Git またはファイル転送プロトコル経由。依存関係をインストールする: サーバーに SSH で接続し、npm install を使用してアプリケーションの依存関係をインストールします。アプリケーションを開始します。node Index.js などのコマンドを使用してアプリケーションを開始するか、pm2 などのプロセス マネージャーを使用します。リバース プロキシの構成 (オプション): Nginx や Apache などのリバース プロキシを使用して、トラフィックをアプリケーションにルーティングします。

Web 開発において Node.js と Java にはそれぞれ長所と短所があり、どちらを選択するかはプロジェクトの要件によって異なります。 Node.js はリアルタイム アプリケーション、迅速な開発、マイクロサービス アーキテクチャに優れており、Java はエンタープライズ グレードのサポート、パフォーマンス、セキュリティに優れています。
