はじめに
本シリーズの前回の記事では、WEBアプリケーション・フレームワークとして、Expressを用いました。
今回は、Hapiを使った例を紹介します。
利用バージョン
- Couchbase Server: 6.6
- Node.js: 15.4.0
- Node.js モジュール
- couchbase: 3.1.1
- hapi: 18.1.0
- uuid: 8.3.2
実装
Couchbase Server
以下、前提事項を記します。
バケット
利用するバケット(MyFirstBucket
)が存在している
インデックス
検索で利用する項目に対して、インデックスが作成されている。
CREATEINDEXdef_index_typeONMyFirstBucket(type)
ユーザー
利用するバケットに対するアクセス権のあるユーザー(Administrator
)を利用する。
Node.js
ライブラリインストール
npm install couchbase hapi uuid --save
ソースコード
app.js
constHapi=require("hapi");constCouchbase=require("couchbase");constUUID=require("uuid");constserver=Hapi.Server({"host":"localhost","port":3000,routes:{cors:{origin:['*']}}});varcluster=newCouchbase.Cluster('couchbase://localhost',{username:'Administrator',password:'password'});constbucket=cluster.bucket("MyFirstBucket");constcollection=bucket.defaultCollection();consttypeName="user";conststatement="SELECT `"+bucket._name+"`.* FROM `"+bucket._name+"` WHERE type = '"+typeName+"'";constselectUsers=async(key)=>{constresult=awaitcluster.query(statement);returnresult.rows;}constupsertUser=async(doc)=>{try{constkey=UUID.v4();constresult=awaitcollection.upsert(key,doc);}catch(error){console.error(error);}};constinit=async()=>{awaitserver.start(error=>{if(error){throwerror;}});returnserver;};init().then(server=>{console.log('Server running at:',server.info.uri);}).catch(err=>{console.log(err);});server.route({method:"GET",path:"/users",handler:async(request,h)=>{constrows=awaitselectUsers();returnh.response(rows);}});server.route({method:"POST",path:"/user",handler:async(request,h)=>{try{request.payload["type"]=typeName;constresult=awaitcollection.upsert(UUID.v4(),request.payload);returnh.response(request.payload);}catch(error){console.error(error);returnh.response("").code(500);}}});
実行確認
サーバー起動
$node app.js
アクセス結果
最後に
次のステップとして、Veu.jsを用いたフロントエンド・アプリケーションとの連携を予定しています。
参考情報
Hapiは、バージョン17で、APIの大きな変更が行われています。新しいAPIについて、下記の記事を参考にしました(この記事では、データベースとしてMongoDBが使われています)。
Developing RESTful APIs with Hapi
Couchbase SDKも、メジャーアップデートにより、APIが大きく変更されています。
過去に発表された下記の二つの連続した記事では、古いバージョンが用いられていますが、基本構成の参考にしています。
Create a RESTful API with Node.js, Hapi, and Couchbase NoSQL