Фрагменты взяты из CRUD-приложения node.js и mongoDB. Репозиторий Github для полного кода. Код работает нормально, но не уверен, что моя структура и использование обещаний и асинхронного ожидания являются плохой практикой.
handlers._newbies = {};
handlers._newbies.post = (parsedReq, res) => {
const newbie = JSON.parse(parsedReq.payload);
databaseCalls.create(newbie)
.then((result) => {
res.writeHead(200,{'Content-Type' : 'application/json'});
const resultToString = JSON.stringify(result.ops[0]);
res.write(resultToString);
res.end();
})
.catch(err => console.log(err));
};
const databaseCalls = {};
databaseCalls.create = (newbie) => {
return new Promise(async (resolve, reject) => {
try {
const client = await MongoClient.connect('mongodb://localhost:27017', { useNewUrlParser: true });
console.log("Connected correctly to server");
const db = client.db('Noob-List');
const result = await db.collection('newbies').insertOne(newbie);
client.close();
resolve(result);
} catch(err) {
console.log(err);
}
});
};
Когда сервер узла получает запрос POST с полезной нагрузкой JSON, он вызывает обработчик handlers._newbies.post, который принимает полезную нагрузку и передает ее вызову
const newbie = JSON.parse(parsedReq.payload);
databaseCalls.create(newbie)
.Я хочу, чтобы этот вызов базы данных возвращал обещание, которое содержит результат вызова db.collection('newbies').insertOne(newbie);
.У меня были проблемы с этим, когда я просто возвращал обещание, возвращаемое insertOne, потому что после возвращения я не могу позвонить client.close();
.
Опять, может, то, что я сделал здесь, хорошо, но я ничего не нашел в Интернете о созданииобещания с обещаниями в них.Спасибо за ваше время, дайте мне знать, что неясно с моим вопросом.