Как связать mongodb и класс в Node.js? У меня есть такая модель 'User': User=new Schema({ 'login':string, 'firstName':string, 'lastName':string }) Ранее, когда я хотел получить, к примеру, имя пользователя, я писал что-то навроде:User.findOne({'login':'peterjacobs123'}, function(err, user){ //...error handle... console.log(user.firstName); }) Но внезапно захотелось перевести все в ООП-рельсы. А как это сделать пока что не очень понятно. На выходе я хочу получить класс User такого вида:var user = new User('peterjacobs123'); console.log(user.firstName); Сразу же возникает проблема с асинхронностью Mongodb, и как её обойти не ясно. Единственное, что приходит в голову-использовать promises, но в каком именно месте их возвращать?
Для связывания MongoDB с классом в Node.js и обхода проблемы асинхронности можно использовать промисы. В вашем случае, можно переписать класс User с использованием промисов следующим образом:
class User { constructor(login) { this.login = login; } async getFirstName() { return new Promise((resolve, reject) => { User.findOne({ login: this.login }, (err, user) => { if (err) { reject(err); } else { resolve(user.firstName); } }); }); } } // Использование класса User const user = new User('peterjacobs123'); user.getFirstName() .then(firstName => { console.log(firstName); }) .catch(err => { console.error(err); });
Таким образом, при создании экземпляра класса User с передачей логина, можно вызвать метод getFirstName(), который возвращает промис с именем пользователя. При обработке промиса с помощью методов then и catch, можно получить имя пользователя или обработать ошибку соответственно.
Надеюсь, это поможет вам связать MongoDB с классом в Node.js и обойти проблему асинхронности.
Для связывания MongoDB с классом в Node.js и обхода проблемы асинхронности можно использовать промисы. В вашем случае, можно переписать класс User с использованием промисов следующим образом:
class User {constructor(login) {
this.login = login;
}
async getFirstName() {
return new Promise((resolve, reject) => {
User.findOne({ login: this.login }, (err, user) => {
if (err) {
reject(err);
} else {
resolve(user.firstName);
}
});
});
}
}
// Использование класса User
const user = new User('peterjacobs123');
user.getFirstName()
.then(firstName => {
console.log(firstName);
})
.catch(err => {
console.error(err);
});
Таким образом, при создании экземпляра класса User с передачей логина, можно вызвать метод getFirstName(), который возвращает промис с именем пользователя. При обработке промиса с помощью методов then и catch, можно получить имя пользователя или обработать ошибку соответственно.
Надеюсь, это поможет вам связать MongoDB с классом в Node.js и обойти проблему асинхронности.