2017-03-18 55 views
0

我創建使用Laravel框架和基礎上的Laracasts教程我的代碼結構中的多個REST API項目。不過,我們正在決定將一些使用NodeJs的項目作爲後端。我開始學習節點,我試圖在Node中複製它。我能夠做到這一點單個對象的響應,但對於多個對象,我似乎無法使它工作。的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" 
    }, 
    ] 
} 

不好意思問這個,因爲我對節點有點新鮮。是否有可能實現輸出,因爲我嘗試了不同的方式,但我仍然得到錯誤。順便說一句,我正在使用數據庫sequelize。

謝謝。

+0

在你的控制器,你在呼喚'變換(用戶)'但是你'users',不'user'。 –

+0

我不知道幼蟲,但你可以看到'像'express'流行框架的NodeJS可用middleware',我想他們可以幫助你achive你想要什麼。並在一個側面說明,你可以刪除'$'前綴的變量:) –

+0

@RonDadon我不認爲這是中間件。我在這段代碼上使用中間件進行jwt令牌認證。它只是在改變數據。循環訪問從數據庫返回的多個對象,並按照我們希望的格式對每個對象進行格式化。 –

回答

0

我已經找到了答案,我的問題,因爲sequelize被返回的結果與數據庫中的結果附加屬性一旁的對象,我不得不修改控制器設置,並將結果轉換爲原始爲了讓我得到來自查詢結果的數據庫中的對象數組。

index(req,res) { 
    User 
     .findAll({ raw: true }) // added "raw: true" 
     .then(function(users){ 
     res.json(api.respond(transfomer.transformCollection(users))); 
     }) 
     .catch(function(error){ 
     res.json(api.respondWithError('users not found',error)); 
     }); 
    }, 

這將從數據庫返回對象數組,並從那裏數據轉換器正常工作。感謝您的幫助。