Я относительно новичок в node.js и MongoDB, поэтому извините заранее, если это очевидный ответ.
Я пытаюсь создать логику для проверки объекта, который передается, ноЯ испытываю затруднения с использованием асинхронного режима и ожидаю правильного определения времени.По сути, я буду передавать строку и пытаюсь выяснить, существует ли какая-либо запись в БД, которая существует с этой строкой.Если нет, то errors
возвращает пустое значение, а если есть, то errors
содержит в себе что-то.Вот соответствующие части моего кода:
Схема (../models/FriendRequest):
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var friendRequestSchema = new Schema({
requestFrom: {type: String, required: true},
requestTo: {type: String, required: true},
});
module.exports = mongoose.model('FriendRequest', friendRequestSchema);
Логика:
var FriendRequest = require('../models/FriendRequest');
async function checkForDuplicateRecord(requestTo) {
let errors = "";
// do not allow duplicate requests
FriendRequest.findOne({
requestTo: requestTo
}, (err, record) => {
if (err) {
errors += "{'\n'}Server Errors.";
} else if (record) {
errors += "{'\n'}You have already sent this person a friend request.";
}
console.log(record);
})
return await errors
}
// Function to perform server-side validation of the friend request before sending to db.
const FriendRequestValidator = (requestTo) => {
let errors = "";
(async() => {
let duplicationErrors = await checkForDuplicateRecord(requestFrom, requestTo);
console.log('duplication errors: ' + duplicationErrors);
errors += duplicationErrors;
})()
return errors;
};
module.exports = FriendRequestValidator;
Когда я печатаюrecord
, я вижу, что если оно существует, данные в records
верны.Однако duplicateErrors
печатается до record
и остается пустым, даже если record
не пусто.Это заставляет меня поверить, что именно из-за выбора времени мои результаты не соответствуют ожидаемым, и я неправильно использую async
и await
.
Заранее большое спасибо за любую помощь!