2015-08-26 3 views
0

Предполагается, что у меня есть файл user.js, который является моей моделью пользователя. Это выглядит следующим образом:Как использовать экземпляры модели с ExpressJS, NodeJS

var user = function(data) { 
    this.data = data; 
} 
user.getUserByID = function(data, callback) { 
    db.get(...., function(data) { 
     callback(new user(data)); 
    }); 
} 
user.prototype.save = function(data, callback) { 
    this.data = data; 
    db.save(...., function(result) { 
     callback(result); 
    }); 
} 
module.exports = user; 

И теперь мой маршрутизатор имеет два пути:

app.get('/profile', function(req, res) { 
    user.getUserByID(req.user.id, function(user) { 
     res.someAction(user); 
    }); 
}); 
app.post('/updateProfile', function(req, res) { 
    user.getUserByID(req.user.id, function(user) { 
     user.save(req.body.data); 
     res.someAction(user); 
    }); 
}); 

Теперь, вот, я должен получить экземпляр пользователя еще раз, когда я должен сохранить его, что я не» Мне очень нравится. Я бы идеально хотел, чтобы пользователь был доступен все время. Также, что происходит со старым пользовательским объектом? Можно ли это как-то упорствовать?

Что такое хороший способ организовать код моей модели? Я использую mysql db и node-mysql.

+0

Вы хотите, чтобы пользовательский объект из запроса GET/profile сохранялся в запросе POST/updateProfile? – byteSlayer

+0

Yup. Хотя, если есть способы лучше, чем строить мою модель, я также открыт для этого. – rufferzool

ответ

1

Вы можете кэшировать объекты пользователя внутри карты с идентификатором пользователя в качестве ключа и объекта пользователя в качестве значения.

var userMap = {} 
app.post('/updateProfile', function(req, res) { 
    if userMap[req.user.id] === undefined){ 
    user.getUserByID(req.user.id, function(user) { 
     user.save(req.body.data); 
     userMap[req.user.id] = req.body.data 
     res.someAction(userMap[req.user.id]); 
    }); 
    }else{ 
    userMap[req.user.id].save(req.body.data);   
    userMap[req.user.id] = req.body.data 
    res.someAction(user); 
    } 
}) 
Смежные вопросы