2016-09-26 25 views
0

我正在根據JSONAPI規範使用express.js構建API,並且有sequelize.js模型。例如,User模型的屬性,如姓名,電子郵件,平衡,last_login_time等對於由JSONAPI指定的guest和authrized用戶序列化`User`模型的最佳實踐是什麼?

如果用戶關於第三方用戶API客戶端應用程序請求數據僅需要與公共屬性,如名稱和last_login_time迴應。

如果用戶對關於自己的客戶端應用程序請求數據API需要與公共和私有屬性做出迴應。

作爲一個串行我用jsonapi-serializer庫。我有這樣的序列化程序:

var JSONAPISerializer = require('jsonapi-serializer').Serializer; 

module.exports = new JSONAPISerializer('users', { 
    attributes: ['name'] 
}); 

我可以創建2個不同的序列化程序嗎?這不會導致麻煩,因爲幾乎所有的模型都會有2個序列化器,並且可能導致引用混淆?

回答

0

使用instanceMethod像這樣:

var User = sequelize.define('User', { 
    ... 
    instanceMethods: { 
     serializeApi: function() { 
      return User.apiSerializer().serialize(this); 
     } 
    } 
}; 

User.apiSerializer = function() { 
    return new JSONAPISerializer('users', { 
     attributes: ['name'] 
    }); 
} 

User.find(...).then((user) => { 
    res.json(user.serializeApi()); 
}); 
+0

你的做法是很好的。但我的問題是如何爲授權用戶序列化一些額外的屬性,例如,當他提取他的個人資料數據? – Dmitro

+0

所以像'user.profile'這是另一個新模型? – user3254198

+0

將'email'字段從'user'移動到'user.profile'是否好方法? – Dmitro

相關問題