私はLaravelフレームワークを使用し、Laracastチュートリアルで自分のコード構造をベースにして、複数のREST APIプロジェクトを作成しました。しかし、NodeJをバックエンドとして使用していくつかのプロジェクトを移動することに決めました。私はノードを学ぶようになり、ノードでそれを複製しようとしています。私は単一のオブジェクトの応答のためにそれを行うことができましたが、複数のオブジェクトに対しては動作させることができません。NodeJs:Laravel PHPフレームワークのようなデータトランスフォーマー
index(req,res) {
User
.findAll()
.then(function(users){
res.json(api.respond(transfomer.transformCollection(users)));
})
.catch(function(error){
res.json(api.respondWithError('users not found',error));
});
}
APIコントローラ:ここ
は私のコントローラである
module.exportsは= {
// response w/o error
respond: function(data,msg,status) {
if (msg == null) {
return {
'status': status || true,
'data': data
};
} else {
return {
'status': true,
'message': msg,
'data': data
};
}
},
// response with error
respondWithError: function(msg,error) {
var self = this;
var status = false;
var data = {
'error': error
};
return this.respond(data,msg,status);
},
};
transformer.js
module.exports = {
// single transformation
transform (user) {
return {
'id' : user.id,
'username': user.username,
'firstname': user.firstname,
'lastname': user.lastname,
'address': user.address,
'phone': user.phone,
'mobile': user.mobile,
'status': user.status
};
},
//
transformCollection(users) {
var self = this;
var data = [];
for (var i = 0; i <= users.length; i++) {
data.push(this.transform(users[i]));
}
return data;
}
};
サンプル出力
{
"status": true,
"data": [
{
"id": 1,
"username": "[email protected]",
"firstname": "Jon",
"lastname": "Doe",
"address": "Homes",
"phone": "+966501212121",
"mobile": "+966501212121",
"status": "NOT VERIFIED"
},
{
"id": 1,
"username": "[email protected]",
"firstname": "Jon",
"lastname": "Doe",
"address": "Homes",
"phone": "+966501212121",
"mobile": "+966501212121",
"status": "NOT VERIFIED"
},
{
"id": 1,
"username": "[email protected]",
"firstname": "Jon",
"lastname": "Doe",
"address": "Homes",
"phone": "+966501212121",
"mobile": "+966501212121",
"status": "NOT VERIFIED"
},
{
"id": 1,
"username": "[email protected]",
"firstname": "Jon",
"lastname": "Doe",
"address": "Homes",
"phone": "+966501212121",
"mobile": "+966501212121",
"status": "NOT VERIFIED"
},
]
}
申し訳ありませんが、私はノードで新しくなっています。私はさまざまな方法で試してみましたが、まだエラーが出ています。 Btw私はデータベースのsequelizeを使用しています。
ありがとうございました。
あなたのコントローラーで 'transform(user)'を呼び出していますが、 'user'ではなく' users'を持っています。 –
私はLarvalを知りませんが、 'express 'のような人気のあるnodejsフレームワークで利用可能な'ミドルウェア 'について読むことができます。あなたが望むものを手に入れることができると思います。そしてサイドノートでは、変数の '$'プレフィックスを削除することができます:) –
@RonDadon私はこれがミドルウェアではないと思います。私は、このコードでjwtトークン認証にミドルウェアを使用しました。それは単にデータを変換することです。 dbから返された複数のオブジェクトをループし、それぞれのオブジェクトをフォーマットからフォーマットします。 –