這個問題有一半是關於我的代碼的具體問題,一半是關於實際從節點API獲取特定用戶數據的高級視圖。基於Node/Express中的JWT爲用戶獲取數據
所以我有用戶註冊/登錄所有工作正常,並可以說我有用戶和小部件之間的一對多映射,所以每個用戶可以從他或她的個人資料頁創建和刪除小部件。
因此,這裏有我的數據庫模型:
var User = new mongoose.Schema({
email: {
type: String,
unique: true,
required: true
},
hash: String,
salt: String
widgets : [{ type: Schema.Types.ObjectId,
ref: 'widget'
}],
});
var Widget = new mongoose.Schema({
name : String,
type : String,
description : String,
});
在用戶登錄過程中,我產生JWT和使用,以節省前端的授權頭。
現在我的問題是雙重的。 1)我如何正確保存小部件,以便它們與當前登錄的用戶相關聯?和2)如何獲取與用戶關聯的所有小部件?
我最初的想法是這樣的:
app.get('api/widgets', function(req, res, next){
// decode authorization header to get user email
// run database query to return all widgets associated with user email
});
app.post('api/widgets', function(req, res, next){
// decode authorization header to get user email
// create widget and update user with widget ID
});
這是正確的想法?如果是這樣,我將如何去解碼授權標題以獲取用戶的電子郵件?我是否需要對與用戶關聯的每個對象都進行相同的過程?或者在Node/Express中有更快,更方便的方法嗎?
是的,你可以存儲用戶數據的小部件在智威湯遜,但需要更新後,每添加/刪除插件運行,這將需要額外的邏輯來新智威湯遜與客戶端同步。最簡單的方法是使用會話。 – alexmac
對不起,我不確定在原始問題中是否清楚。我不想將小部件數據存儲在JWT中。我只是將用戶電子郵件存儲在JWT中。通過'用小部件ID更新用戶',我的意思是用小部件ID更新數據庫中的用戶。 – jmknoll
我認爲這是正確的方法。如果你使用一些庫來編碼jwt token,那麼它最有可能也有一些解碼功能。要保存小部件,只需使用小部件模型'new Widget({name ....})的保存功能。save(function(err,widget){更新用戶在這裏使用$ push operator})'然後獲取用戶使用的小部件'User.findOne(id).populate('widgets')。exec(function(err,user){用戶在這裏將有一個小部件數組,不是id,而是來自widget集合的實際對象});' – Molda