В моей базе данных есть модель User. Пользователи могут или не могут устанавливать свое местоположение. Когда я запрашиваю, я запрашиваю потенциально одно или все из следующего: - имя включает в себя xxx - квалификационные метки включают в себя xxx - местоположение рядом с xxx
Я пишу свою модель следующим образом:
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const bcrypt = require("bcrypt");
const keys = require("../../config/keys");
const userModel = new Schema({
image: {
uri: {
type: String,
}
},
name: {type: String, index:true},
tagline: String,
contactemail: {type: String, unique: true},
email: {type: String, unique: true, required: true},
password: {type: String, required: true},
phone: String,
intphone: String,
description: String,
url: String,
tags:[],
location: {
type: {
type: String,
enum: ["Point"],
default: 'Point',
},
coordinates: {
type: [Number],
default: undefined,
index: '2dsphere',
}
},
});
userModel.pre('save', function(next) {
const user=this;
if(!user.isModified('password')) {
return next();
}
bcrypt.genSalt(parseInt(keys.BCRYPT_SALT_ROUNDS), (err, salt) => {
if(err) {
return next(err)
}
bcrypt.hash(user.password, salt, (err, hash) => {
if(err) {
return next(err);
}
user.password = hash;
next();
})
})
}),
userModel.methods.comparePassword = function(candidatePassword) {
const user = this;
return new Promise((resolve, reject) => {
bcrypt.compare(candidatePassword, user.password, (err, isMatch) => {
if(err) {
return reject(err);
}
if(!isMatch) {
return reject(false);
}
resolve(true);
} )
});
}
//Indexes
//userModel.index({location: "2dsphere" });
const User = mongoose.model("user", userModel);
User.on("index", function(error) {
console.log("Index error: user", error);
});
module.exports = User;
Независимо от того, что я пытаюсь, индекс 2dshpere не применяется. Есть идеи, что я делаю не так? Я также пытался не добавлять определение пользовательской модели, а добавлять вниз как userModel.index (как вы можете видеть закомментировано выше).
В дополнение к тому, что я не применяю индекс, я не могу получить доступ к выданной ошибке. Если я попытаюсь со следующим:
User.on("index", function(error) {
console.log("Index error: user", error);
});
'ошибка' не определена. Если я пытаюсь использовать error.message, то происходит сбой узла, так как ошибка не определена, поэтому error.message не существует.
Есть мысли или помочь кому-нибудь?