У меня есть функция, которая не завершает вызов модели mongoose.
Код выполняется в Node.js (v11.2.0).
/ test.js
const User = require("./users/models/users.model");
const mongoose = require("mongoose");
const testfunction = async () => {
try {
console.log("This is the first line of this function");
const user = await User.findOne({
email: "user@user.com"
}).lean();
console.log("This goes after the mongoose call");
if (user) {
console.log("user", user);
} else {
console.error("error occurred");
}
} catch (e) {
console.log("Error: ", e);
}
};
mongoose
.connect(
"mongodb://localhost:27017/testing-db",
{ useNewUrlParser: true }
)
.then(testfunction());
/ users.model.js
const mongoose = require("mongoose");
const nameSchema = "users";
const Schema = mongoose.Schema;
const UserSchema = new Schema(
{
first_name: { type: String, required: true },
last_name: { type: String, required: true },
email: { type: String, required: true, lowercase: true, unique: true }
},
{
timestamps: true
}
);
module.exports = mongoose.model(nameSchema, UserSchema);
Я ожидаю выхода данных пользователя из консоли на консоль.В настоящее время тестовая функция выводит только «This if первая строка этой функции» в стандартный вывод (однако программа не возвращается к вводу оболочки).Я также хотел бы знать, что является причиной проблемы.
UPD
Итак, я нашел обходной путь, чтобы сделать все это с помощью обратного вызова mongoose.connect.Код для test.js выглядит следующим образом:
const mongoose = require("mongoose");
const User = require("./tschema");
mongoose.connect(
"mongodb://localhost:27017/portico-testing-db",
{ useNewUrlParser: true },
async () => {
console.log("before query");
const user = await User.findOne({ email: "user@user.com" })
console.log("user: ", user);
}
);
Я до сих пор не понимаю, почему он работает так, а не иначе, но я надеюсь, что это решение поможет любому, кто находится в подобной ситуации..