Получение ошибки при попытке установить индекс 2dsphere для mongoose / node - PullRequest
0 голосов
/ 08 апреля 2020

В моей базе данных есть модель 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 не существует.

Есть мысли или помочь кому-нибудь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...