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
// 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') }); };
post リクエストを受信すると、コールバック内のコード (リクエスト) が実行されます。オブジェクト (リクエスト パラメータまたは JSON を含む) とレスポンス オブジェクト。
Postman を使用して、POST リクエストを localhost:8000/notes に送信してテストできます。你应该得到回复:'Hello'。
太好了!你创建了第一个真正的路由。
下一步是在你的请求中添加一些参数并在 API 中处理它们,最后添加到你的数据库中。
请求参数
在 Postman 中,在选择 x-www-form-urlencoded 单选按钮后,转到 Body 选项卡并添加一些键值对。
这会将编码后的表单数据添加到你的请求中,你可以使用 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 部署后,将用户的用户名和密码添加到数据库:
然后复制这里第二个 URL:
在项目根目录的目录配置中,创建一个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 选项卡下设置 title 和 body。
响应应如下所示:
如果你登录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('notes').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('notes').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('notes').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('notes').insert(note, (err, result) => { if (err) { res.send({ 'error': 'An error has occurred' }); } else { res.send(result.ops[0]); } }); }); };
尝试使用一个笔记 ID,它应如下所示:
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('notes').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('notes').update(details, note, (err, result) => { if (err) { res.send({'error':'An error has occurred'}); } else { res.send(note); } }); }); // ...
现在你可以更新任何笔记,如下所示:
请注意这些代码还不完美 —— 比如你没有提供正文或标题,PUT 请求将会使数据库中的笔记上的那些字段无效。
API 完成
就这么简单!你完成了可以进行 CRUD 操作的 Node API。
本教程的目的是让你熟悉 Express、Node 和 MongoDB —— 你可以用简单的程序作为进军更复杂项目的跳板。
将来我将会编写系列教程,用不同的语言和框架创建更简单的API。如果你有兴趣,请点击关注!
更多编程相关知识,可访问:编程教学!!
以上がNode.js を使用して 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)

ホットトピック









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

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

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

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

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

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

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

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