目次
構成
私たちのサーバー
请求参数
添加到你的数据库
READ 路由
DELETE 路由
UPDATE 路由
API 完成
ホームページ ウェブフロントエンド jsチュートリアル Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

Sep 01, 2020 am 10:00 AM
APIサーバー node.js

Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

Node.js は、その柔軟な構造と厳密な仕様の欠如により複雑に見えるため、初心者にとっては威圧的になる可能性があります。 [ビデオ チュートリアルの推奨: node js チュートリアル ]

このチュートリアルは、基本的な REST ルーティングと基本的なデータベース インタラクションに焦点を当てた、Node.js、Express フレームワーク、MongoDB のクイック ガイドです。任意のアプリケーションで使用できるシンプルな API フレームワーク テンプレートを構築します。

このチュートリアルは を対象としています: REST API と CRUD 操作の基本的な理解と、JavaScript の基本的な知識が必要です。 ES6(主にアロー関数)を使用していますが、それほど複雑ではありません。

このチュートリアルでは、作成、読み取り、更新、削除の 4 つの CRUD 操作すべてを実行できる、Google Keep に似た Web メモ作成アプリケーションのバックエンド スケルトンを作成します。 。

構成

ノードがインストールされていない場合は、ここを参照してください

新しいディレクトリを作成し、npm init を実行し、プロンプトに従ってアプリケーションに「notable」(またはその他の好みの名前) という名前を付けます。

npm init
ログイン後にコピー

完了すると、ディレクトリに package.json ファイルが作成されます。プロジェクトに必要な依存関係のインストールを開始できます。

Express をフレームワークとして、MongoDB をデータベースとして、そして body-parser というパッケージを使用して JSON リクエストを支援します。

npm install --save express mongodb@2.2.16 body-parser
ログイン後にコピー

また、Nodemon を開発依存関係としてインストールすることを強くお勧めします。これは、ファイルが変更されたときにサーバーを自動的に再起動する、非常にシンプルな小さなパッケージです。

実行する場合:

npm install --save-dev nodemon
ログイン後にコピー

次に、次のスクリプトを package.json に追加します:

// package.json
  "scripts": {
    "dev": "nodemon server.js"
  },
ログイン後にコピー

complete package.json次のようになります。

// package.json
{
  "name": "notable",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "scripts": {
    "dev": "nodemon server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.15.2",
    "express": "^4.14.0",
    "mongodb": "^2.2.16"
  },
  "devDependencies": {
    "nodemon": "^1.11.0"
  }
}
ログイン後にコピー

これで、server.js ファイルを作成し、API を構築できます。

私たちのサーバー

すべての依存関係を server.js にインポートすることから始めます。

// server.js
const express        = require('express');
const MongoClient    = require('mongodb').MongoClient;
const bodyParser     = require('body-parser');
const app            = express();
ログイン後にコピー

MongoClient を使用してデータベースと対話します。アプリは Express フレームワークのインスタンスとしても初期化されます。

最後に行うことは、プログラムに リクエストのリッスンを開始するように指示することです。

次のようにポートを指定してリッスンを開始できます:

// server.js
const port = 8000;
app.listen(port, () => {
  console.log('We are live on ' + port);
});
ログイン後にコピー

ここで、

npm run dev (または node server.js Nodemon をインストールしていない場合)、ターミナルに「We are live on port 8000」というプロンプトが表示されます。

サーバーが起動されました。しかし、まだ何もできません。

次にこの問題を解決しましょう。

CRUD ルーティング

この例では、メモの作成、メモの読み取り、メモの更新、メモの削除の 4 つのルートを構築します。

これにより、Node.js を使用してほぼすべての基本的なルートを構築する方法がわかります。

ただし、API をテストするには、クライアントを模倣してリクエストを行う必要もあります。これを行うには、

Postman という優れたアプリを使用します。これにより、カスタム ヘッダーとパラメーターを使用して単純な HTTP リクエストを作成できます。

Postman をインストールして、ルーティングの設定を始めましょう。

プロジェクト構造

ほとんどの Node.js チュートリアル (および多くの実際の例) では、すべてのルートが 1 つの大きな

routes.js ファイルにまとめられています。これには少し不快感を感じます。対照的に、ファイルを個別のフォルダーに分割すると、可読性が向上し、大規模なアプリケーションの管理が容易になります。

現在は大規模なアプリケーションを行っていませんが、それでも可能です。次のディレクトリを作成します:

app フォルダー。このフォルダーには、index.js および note_routes.js ファイルを含む Route フォルダーが含まれます。

mkdir app
cd app
mkdir routes
cd routes
touch index.js
touch note_routes.js
ログイン後にコピー

これらのディレクトリは、単純な小さなプログラムには過剰に思えるかもしれませんが、最初から正しく設定することが常に意味があります。

最初のルート

CRUD の C から始めましょう。どのようにメモを作成しますか?

したがって、始める前に、まず基礎を築く必要があります。 Express では、ルートは Express インスタンスとデータベースをパラメータとして受け取る関数に含まれています。

次のように:

// routes/note_routes.js
module.exports = function(app, db) {
};
ログイン後にコピー

次に、この関数を

index.js 経由でエクスポートできます:

// routes/index.js
const noteRoutes = require('./note_routes');
module.exports = function(app, db) {
  noteRoutes(app, db);
  // Other route groups could go here, in the future
};
ログイン後にコピー

次に、

で使用するためにインポートします。 .js で使用されるサーバー:

// server.js
const express        = require('express');
const MongoClient    = require('mongodb').MongoClient;
const bodyParser     = require('body-parser');
const app            = express();
const port = 8000;
require('./app/routes')(app, {});
app.listen(port, () => {
  console.log('We are live on ' + port);
});
ログイン後にコピー

データベースがセットアップされていないため、空のオブジェクトを渡すだけであることに注意してください。

わかりました、

さて 独自の CREATE ルートを作成できます。

構文は単純です:

// note_routes.js
module.exports = function(app, db) {
  app.post('/notes', (req, res) => {
    // You'll create your note here.
    res.send('Hello')
  });
};
ログイン後にコピー

アプリケーションが「/notes」パスに対する

post リクエストを受信すると、コールバック内のコード (リクエスト) が実行されます。オブジェクト (リクエスト パラメータまたは JSON を含む) とレスポンス オブジェクト。

Postman を使用して、POST リクエストを localhost:8000/notes に送信してテストできます。

Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

你应该得到回复:'Hello'。

太好了!你创建了第一个真正的路由。

下一步是在你的请求中添加一些参数并在 API 中处理它们,最后添加到你的数据库中。

请求参数

在 Postman 中,在选择 x-www-form-urlencoded 单选按钮后,转到 Body 选项卡并添加一些键值对。

这会将编码后的表单数据添加到你的请求中,你可以使用 API ??处理该请求。

Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

你可以去尝试更多的设置项。

现在在你的 note_routes.js 中,让我们输出 body 的内容。

// note_routes.js
module.exports = function(app, db) {
  app.post('/notes', (req, res) => {
    console.log(req.body)
    res.send('Hello')
  });
};
ログイン後にコピー

用 Postman 发送请求,你会看到……undefined。

不幸的是,Express 无法自行处理 URL 编码的表单。虽然你确实安装了这个 body-parser 包......

// server.
const express        = require('express');
const MongoClient    = require('mongodb').MongoClient;
const bodyParser     = require('body-parser');
const app            = express();
const port = 8000;
app.use(bodyParser.urlencoded({ extended: true }));
require('./app/routes')(app, {});
app.listen(port, () => {
  console.log('We are live on ' + port);
});
ログイン後にコピー

Now you should see the body as an object in the terminal.
现在你应该将 body 视为终端中的对象。

{ title: 'My Note Title', body: 'What a great note.' }
ログイン後にコピー

第一个路由的最后一步:设置数据库,然后添加数据。

最简单方法是通过 mLab 设置 Mongo 数据库的:它是最小的而且是免费的,设置的速度非常快。

创建帐户和 MongoDB 部署后,将用户的用户名和密码添加到数据库:

Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

然后复制这里第二个 URL:

Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

在项目根目录的目录配置中,创建一个db.js文件。

mkdir config 
cd config
touch db.js
ログイン後にコピー

在里面,添加刚才的URL:

module.exports = {
  url : YOUR URL HERE
};
ログイン後にコピー

别忘了把你的用户名和密码(来自数据库用户的密码,而不是你的 mLab 帐户)添加到URL中。 (如果你要将此项目提交到 Github 上,请确保包含 .gitignore 文件 像这样, ,不要与任何人分享你的密码。)

现在在你的 server.js 中,可以用 MongoClient 连接到数据库了,使用它来包装你的应用程序设置:

// server.js
const express        = require('express');
const MongoClient    = require('mongodb').MongoClient;
const bodyParser     = require('body-parser');
const db             = require('./config/db');
const app            = express();
const port = 8000;
app.use(bodyParser.urlencoded({ extended: true }));
MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err)
  require('./app/routes')(app, database);
  app.listen(port, () => {
    console.log('We are live on ' + port);
  });               
})
ログイン後にコピー

如果你用的是最新版本的 MongoDB(3.0+),请将其修改为:

// server.js
const express        = require('express');
const MongoClient    = require('mongodb').MongoClient;
const bodyParser     = require('body-parser');
const db             = require('./config/db');
const app            = express();
const port = 8000;
app.use(bodyParser.urlencoded({ extended: true }));
MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err)
                      
  // Make sure you add the database name and not the collection name
  const database = database.db("note-api")
  require('./app/routes')(app, database);
  app.listen(port, () => {
    console.log('We are live on ' + port);
  });               
})
ログイン後にコピー

这是你的基础架构的最后一个设置!

添加到你的数据库

MongoDB将数据存储在 collections 中。在你的项目中,你希望将笔记存储在一个名为 notes 的 collection 中。

由于将数据库作为路径中的 db 参数传入,因此可以像这样访问它:

db.collection('notes')
ログイン後にコピー

创建笔记就像在集合上调用 insert 一样简单:

const note = { text: req.body.body, title: req.body.title}
  db.collection('notes').insert(note, (err, results) => {
}
ログイン後にコピー

插入完成后(或由于某种原因失败),要么返回错误或反回新创建的笔记对象。这是完整的 note_routes.js 代码:

// note_routes.js
module.exports = function(app, db) {
  const collection = 
  app.post('/notes', (req, res) => {
    const note = { text: req.body.body, title: req.body.title };
    db.collection('notes').insert(note, (err, result) => {
      if (err) { 
        res.send({ 'error': 'An error has occurred' }); 
      } else {
        res.send(result.ops[0]);
      }
    });
  });
};
ログイン後にコピー

试试看!使用 Postman 发送 x-www-form-urlencoded POST 请求,在 Body 选项卡下设置 titlebody

响应应如下所示:

Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

如果你登录mLab,你还应该能够在数据库中看到创建的笔记。

READ 路由

现在可以稍微加快步伐。

假设你希望通过导航到 localhost:8000/notes/{id} 来获取刚创建的笔记。这是链接应该是localhost:8000/notes/585182bd42ac5b07a9755ea3。(如果你没有得到其中笔记的 ID,可以通过检查 mLab 或创建一个新的笔记)。

以下是 note_routes.js 中的内容:

// note_routes.js
module.exports = function(app, db) {
  app.get('/notes/:id', (req, res) => {
    
  });
  app.post('/notes', (req, res) => {
    const note = { text: req.body.body, title: req.body.title };
    db.collection('notes').insert(note, (err, result) => {
      if (err) { 
        res.send({ 'error': 'An error has occurred' }); 
      } else {
        res.send(result.ops[0]);
      }
    });
  });
};
ログイン後にコピー

就像以前一样,你将在数据库 collection 中调用一个方法。在这里,它被恰当地命名为 findOne。

// note_routes.js
module.exports = function(app, db) {
  app.get('/notes/:id', (req, res) => {
    const details = { '_id': <ID GOES HERE> };
    db.collection(&#39;notes&#39;).findOne(details, (err, item) => {
      if (err) {
        res.send({'error':'An error has occurred'});
      } else {
        res.send(item);
      }
    });
  });
app.post('/notes', (req, res) => {
    const note = { text: req.body.body, title: req.body.title };
    db.collection(&#39;notes&#39;).insert(note, (err, result) => {
      if (err) { 
        res.send({ 'error': 'An error has occurred' }); 
      } else {
        res.send(result.ops[0]);
      }
    });
  });
};
ログイン後にコピー

你可以通过 req.params.id 从 URL 参数中获取 id。但是,如果你试图将字符串插入上面的 <ID GOES HERE> 位置,它将无法正常工作。

MongoDB 不仅要求 ID 为字符串,还要求 ID 是一个对象,它们被之为 ObjectID。

别担心,这很容易解决。这是完整的代码:

// note_routes.js
var ObjectID = require('mongodb').ObjectID;
module.exports = function(app, db) {
  app.get('/notes/:id', (req, res) => {
    const id = req.params.id;
    const details = { '_id': new ObjectID(id) };
    db.collection(&#39;notes&#39;).findOne(details, (err, item) => {
      if (err) {
        res.send({'error':'An error has occurred'});
      } else {
        res.send(item);
      } 
    });
  });
app.post('/notes', (req, res) => {
    const note = { text: req.body.body, title: req.body.title };
    db.collection(&#39;notes&#39;).insert(note, (err, result) => {
      if (err) { 
        res.send({ 'error': 'An error has occurred' }); 
      } else {
        res.send(result.ops[0]);
      }
    });
  });
};
ログイン後にコピー

尝试使用一个笔记 ID,它应如下所示:

Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

DELETE 路由

实际上删除对象与查找对象几乎相同。你只需用 remove 函数替换 findOne 即可。这是完整的代码:

// note_routes.js
// ...
  app.delete('/notes/:id', (req, res) => {
    const id = req.params.id;
    const details = { '_id': new ObjectID(id) };
    db.collection(&#39;notes&#39;).remove(details, (err, item) => {
      if (err) {
        res.send({'error':'An error has occurred'});
      } else {
        res.send('Note ' + id + ' deleted!');
      } 
    });
  });
// ...
ログイン後にコピー

UPDATE 路由

最后一个! PUT 方法基本上是 READ 和 CREATE 的混合体。你找到该对象,然后更新它。如果刚才你删除了数据库中唯一的笔记,那就再创建一个!

代码:

// note_routes.js
// ...
  app.put('/notes/:id', (req, res) => {
    const id = req.params.id;
    const details = { '_id': new ObjectID(id) };
    const note = { text: req.body.body, title: req.body.title };
    db.collection(&#39;notes&#39;).update(details, note, (err, result) => {
      if (err) {
          res.send({'error':'An error has occurred'});
      } else {
          res.send(note);
      } 
    });
  });
// ...
ログイン後にコピー

现在你可以更新任何笔记,如下所示:

Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

请注意这些代码还不完美 —— 比如你没有提供正文或标题,PUT 请求将会使数据库中的笔记上的那些字段无效。

API 完成

就这么简单!你完成了可以进行 CRUD 操作的 Node API。

本教程的目的是让你熟悉 Express、Node 和 MongoDB —— 你可以用简单的程序作为进军更复杂项目的跳板。

将来我将会编写系列教程,用不同的语言和框架创建更简单的API。如果你有兴趣,请点击关注!

更多编程相关知识,可访问:编程教学!!

以上がNode.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?の詳細内容です。詳細については、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Nov 16, 2022 pm 08:34 PM

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

最適な Node.js Docker イメージを選択する方法について話しましょう。 最適な Node.js Docker イメージを選択する方法について話しましょう。 Dec 13, 2022 pm 08:00 PM

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Nov 29, 2022 pm 08:44 PM

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

Nodeのイベントループについて話しましょう Nodeのイベントループについて話しましょう Apr 11, 2023 pm 07:08 PM

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

ノードがnpmコマンドを使用できない場合はどうすればよいですか? ノードがnpmコマンドを使用できない場合はどうすればよいですか? Feb 08, 2023 am 10:09 AM

ノードが npm コマンドを使用できない理由は、環境変数が正しく設定されていないためです。解決策は次のとおりです: 1. 「システムのプロパティ」を開きます; 2. 「環境変数」->「システム変数」を見つけて、環境を編集します。変数; 3.nodejs フォルダーの場所を見つけます; 4.「OK」をクリックします。

See all articles