bookshelf.jsを始めましょう

Joseph Gordon-Levitt
リリース: 2025-02-21 10:13:10
オリジナル
973 人が閲覧しました

Getting Started with Bookshelf.js

コアポイント

  • bookshelf.jsは、javascript(特にnode.js)用のオブジェクトリレーショナルマッピング(orm)ソフトウェアであり、開発者が選択したプログラミング言語でオブジェクトを使用して、データベースと通信するプロセスを簡素化します。データベース。
  • ライブラリは、CRUD(作成、読み取り、更新、削除)を実行するためのシンプルで直感的な方法を提供し、約束ベースのインターフェイスをサポートします。つまり、クエリが成功した場合にのみ関数が呼び出されます。
  • 記事でブログJSON APIを作成する例に示されているように、bookshelf.jsをExpress.jsと併用してAPIを構築することができ、基礎となるデータベーステーブル構造をカプセル化して通常のJavaScriptを露出させることができますクエリ用のオブジェクト。

近年、JavaScriptは人気が急上昇しています。長年にわたり、人々はこの人気のある言語をサーバー側に何度も適用しようとしてきました。最も成功した試みの1つはnode.jsでした。これは、サーバーアプリケーションをすばやく書き込む方法としてコミュニティに推奨されていました。ノードのセールスポイントは、パフォーマンスと開発時間の両方で速度です。この人気により、コミュニティは成長を続けており、プロジェクトはより多くの貢献者の恩恵を受けて、Express.jsなどの高品質のモジュールをもたらします。

したがって、人々はノードを使用して完全なバックエンドを構築し始めました。バックエンドシステムがすべき最も重要なことの1つは、データベースと効果的に通信することです。これは、オブジェクト関係マッピング(ORM)ソフトウェアが登場する場所です。多くの場合、開発者はデータベースと通信するために使用しているプログラミング言語とSQLに習熟する必要があります。 ORMは、開発者が選択したプログラミング言語でオブジェクトを使用してデータベースと対話できるようにすることにより、開発プロセスを簡素化します。この記事では、ormを紹介し、bookshelf.js ormに特別な注意を払っています。

ormとは何ですか?

wikipediaは、オブジェクト関係マッピングを次のように定義します

オブジェクト指向のプログラミング言語で、互換性のないタイプシステム間でデータを変換するためのプログラミング手法。これにより、実際には、プログラミング言語で内部で使用できる「仮想オブジェクトデータベース」が作成されます。

この例では、プログラミング言語はJavaScriptであり、互換性のないシステムはMySQLなどのリレーショナルデータベースシステムです。これは、ORMライブラリが、従来のJavaScriptオブジェクトとの対話と同じ方法でデータベースと通信できるようにする必要があることを意味します。 node.jsには多くのormライブラリがあり、一般的なライブラリにはpersistence.js、sequelize.js、bookshelf.jsが含まれます。この記事では、bookshelf.jsを紹介します。

bookshelf.jsの例

データベースインタラクションは通常、4つのCRUD操作を中心に展開します。これは、作成、読み取り、更新、削除です。 bookshelf.jsは、これらの操作を実行するための直感的な方法を提供します。たとえば、次のような操作を作成します。

Postが対応するデータベーステーブルを備えたモデルであり、名前はデータベーステーブルの列に対応するプロパティであると仮定します。

new Post({name: 'New Article'}).save().then(function(model) {
  // ...
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
同様に、読み取り操作は次のとおりです
new Post({name: 'New Article'}).save().then(function(model) {
  // ...
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

次にコードを呼び出すことに注意してください。 bookshelf.jsは、約束ベースのインターフェイスをサポートしています。この場合、これは、その後に渡された匿名関数がクエリが成功した場合にのみ呼び出されることを意味します。モデルは、ユーザーに関連付けられたプロパティにアクセスするために使用できる生成されたJavaScriptオブジェクトです。この例では、model.get( 'gender')がユーザーの性別を返します。

bookshelf.jsおよびexpress.js < より完全な例については、次のリソースを使用してブログを作成するために委任されているとします。

そして、クライアントはすでに次の表を持っています:

// select * from `user` where `email` = 'user@mail.com'
new User({email: 'user@mail.com'})
  .fetch()
  .then(function(model) {
    console.log(model.get('gender'));
  });
ログイン後にコピー
ログイン後にコピー

まず、package.jsonを使用してExpress.js環境をセットアップする必要があります。

<code>GET  /api/article
GET  /api/article/:article_id
POST /api/article</code>
ログイン後にコピー
ログイン後にコピー
Bookshelfはそれに依存しているため、Knexクエリビルダーが必要であり、約束を処理するにはBluebirdが必要です。 app.js構造は次のとおりです

MySQLデータベースはブログと呼ばれます。記事モデルを定義し、記事の表にバインドする必要があります。 // {モデル定義コードはこちら}を置き換えます。
create table article (
  id int not null primary key,
  title varchar(100) null,
  body text null,
  author varchar(100) null
);
ログイン後にコピー
ログイン後にコピー

間違いなく、これがbookshelf.jsでモデルを定義するために必要なすべてです。このモデルを使用して、APIのデータベースを照会できるようになりました。まず、GET /API /記事メソッドは、データベース内のすべての記事を返す必要があります。

bookshelf.jsで
{
  "name": "article_api",
  "description": "expose articles via JSON",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "bluebird": "^2.1.3",
    "body-parser": "^1.3.1",
    "express": "4.4.3",
    "mysql": "*",
    "knex": "*",
    "bookshelf": "*"
  }
}
ログイン後にコピー
ログイン後にコピー
fetchallデータベーステーブルですべてのエントリを取得し、キャッチがエラーが発生した場合にのみ実行されます(ドキュメントにはより多くのモデルメソッドがあります)。

// 当应用程序启动时
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var Promise = require('bluebird');

var dbConfig = {
  client: 'mysql',
  connection: {
    host: 'localhost',
    user: 'root',
    password: 'your_password',
    database: 'blog',
    charset: 'utf8'
  }
};

var knex = require('knex')(dbConfig);
var bookshelf = require('bookshelf')(knex);

app.set('bookshelf', bookshelf);

var allowCrossDomain = function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  next();
};

app.use(allowCrossDomain);
// 解析 application/x-www-form-urlencoded
app.use(bodyParser.urlencoded());

// 解析 application/json
app.use(bodyParser.json());

// 解析 application/vnd.api+json 为 json
app.use(bodyParser.json({type: 'application/vnd.api+json'}));

// 在其他地方,使用 bookshelf 客户端:
var bookshelf = app.get('bookshelf');

// {我们的模型定义代码在这里}

app.listen(3000, function() {
  console.log('Express started at port 3000');
});
ログイン後にコピー
ログイン後にコピー
結論

var Article = bookshelf.Model.extend({
  tableName: 'article'
});
ログイン後にコピー
ログイン後にコピー
node.jsはテクノロジーとして開発されており、Express.jsなどのモジュールを介してWebアプリケーションとAPIを構築するために使用できます。 bookshelf.jsは、基礎となるデータベーステーブル構造をカプセル化し、クエリ用に通常のJavaScriptオブジェクトを公開することにより、node.jsアプリケーションのリレーショナルデータベースと相互作用します。この記事では、高レベルの紹介を提供します。 DEMOプロジェクトの完全な実装は、GitHubで利用できます。 (githubリンクは、存在する場合はここに追加する必要があります)

bookshelf.js faq

bookshelf.jsとは何ですか?なぜそれを使用する必要があるのですか?

bookshelf.jsは、SQLデータベースと対話するためのシンプルでエレガントなAPIを提供するJavaScriptライブラリです。トランザクション、緊急/首の緊急関係の負荷、多型の関連性などをサポートしています。 bookshelf.jsを使用することの主な利点は、そのシンプルさと柔軟性です。これにより、より多くのことをしながらコードを書き込むことができ、開発プロセスがより速く、より効率的になります。

bookshelf.jsをインストールする方法は?

bookshelf.jsをインストールするには、システムにnode.jsとnpmをインストールする必要があります。インストールが完了したら、端末でコマンドを実行してbookshelf.jsをインストールできます。これにより、bookshelf.js、knex.js(SQLクエリビルダー)およびSQLite3(軽量ディスクベースのデータベース)をインストールします。

bookshelf.jsをデータベースに接続する方法は?

bookshelf.jsをデータベースに接続するには、最初にデータベース構成でknex.jsを初期化する必要があります。次に、この初期化されたknexインスタンスをbookshelf.jsに渡します。基本的な例は次のとおりです

new Post({name: 'New Article'}).save().then(function(model) {
  // ...
});
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
bookshelf.jsでモデルを定義する方法は?

bookshelf.jsでは、モデルはbookshelf.jsが提供する基本クラスモデルを拡張することによって定義されます。ユーザーモデルを定義する例は次のとおりです。

bookshelf.jsを使用してデータベースからデータを抽出する方法は?
// select * from `user` where `email` = 'user@mail.com'
new User({email: 'user@mail.com'})
  .fetch()
  .then(function(model) {
    console.log(model.get('gender'));
  });
ログイン後にコピー
ログイン後にコピー

bookshelf.jsを使用してデータベースからデータを抽出するのは非常に簡単です。モデルが提供するフェッチ方法を使用できます。例は次のとおりです。

bookshelf.jsを使用してデータベースにデータを保存する方法は?
<code>GET  /api/article
GET  /api/article/:article_id
POST /api/article</code>
ログイン後にコピー
ログイン後にコピー
また、bookshelf.jsを使用してデータベースにデータを保存することも簡単です。モデルが提供する保存方法を使用できます。例は次のとおりです。

bookshelf.jsを使用してデータベース内のデータを更新する方法は?

create table article (
  id int not null primary key,
  title varchar(100) null,
  body text null,
  author varchar(100) null
);
ログイン後にコピー
ログイン後にコピー
データベース内のデータは、保存方法を使用して更新できます。最初にモデルを抽出してから、新しいデータでSaveを呼び出すだけです。例は次のとおりです。

bookshelf.jsを使用してデータベースからデータを削除するにはどうすればよいですか?

{
  "name": "article_api",
  "description": "expose articles via JSON",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "bluebird": "^2.1.3",
    "body-parser": "^1.3.1",
    "express": "4.4.3",
    "mysql": "*",
    "knex": "*",
    "bookshelf": "*"
  }
}
ログイン後にコピー
ログイン後にコピー
モデルが提供するDestroyメソッドを使用して、データをデータベースから削除できます。例は次のとおりです。

bookshelf.jsで関係を処理する方法は?

// 当应用程序启动时
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var Promise = require('bluebird');

var dbConfig = {
  client: 'mysql',
  connection: {
    host: 'localhost',
    user: 'root',
    password: 'your_password',
    database: 'blog',
    charset: 'utf8'
  }
};

var knex = require('knex')(dbConfig);
var bookshelf = require('bookshelf')(knex);

app.set('bookshelf', bookshelf);

var allowCrossDomain = function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  next();
};

app.use(allowCrossDomain);
// 解析 application/x-www-form-urlencoded
app.use(bodyParser.urlencoded());

// 解析 application/json
app.use(bodyParser.json());

// 解析 application/vnd.api+json 为 json
app.use(bodyParser.json({type: 'application/vnd.api+json'}));

// 在其他地方,使用 bookshelf 客户端:
var bookshelf = app.get('bookshelf');

// {我们的模型定义代码在这里}

app.listen(3000, function() {
  console.log('Express started at port 3000');
});
ログイン後にコピー
ログイン後にコピー
BookShelf.jsは、Hasone、Hasmany、Beluntsto、Belongstomanyなどのモデル間の関係に対処するいくつかの方法を提供します。複数の投稿モデルを備えたユーザーモデルの例は次のとおりです。

bookshelf.jsのトランザクションを処理する方法は?

Bookshelf.jsでのトランザクションは、knex.jsが提供するトランザクションメソッドを使用して処理できます。例は次のとおりです。

var Article = bookshelf.Model.extend({
  tableName: 'article'
});
ログイン後にコピー
ログイン後にコピー

上記のコード例の詳細の一部は、特定のデータベースと環境に従って調整する必要がある場合があることに注意してください。 さらに、最新情報とより詳細なガイダンスについては、bookshelf.jsの公式ドキュメントを参照することをお勧めします。

以上がbookshelf.jsを始めましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート