ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js を使用して API サーバーをすばやく構築するにはどうすればよいですか?

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

青灯夜游
青灯夜游転載
2020-09-01 10:00:291932ブラウズ

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':  };
    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></id>  位置,它将无法正常工作。

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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。