Невозможно запросить MongoDB с помощью Mongoose вне REST API

1

Это сводит меня с ума. Маршрутизатор Express отлично работает с моделями Mongoose, но я не могу использовать модели в других файлах без маршрутов. Каждый раз, когда я пытаюсь запустить файл с импортированными моделями или схемой mongoose, он возвращает пустое значение в консоли. Я вызываю функцию точно так же, как в файле пользовательского маршрутизатора.

///////////////////////////////
//File: test.js (not working)//
///////////////////////////////

var user = require('./user');


user.getUserById({_id:'5c902f4c75d827057cc5ad17'}, function(err, user){
    if(err) return console.error(err);
    console.log(user);
});

////////////////////////////
//User model file: user.js//
////////////////////////////


var mongoose = require('mongoose');
mongoose.Promise = global.Promise;

mongoose.set('debug', true);

var bcrypt = require('bcryptjs');

const moment = require('moment');

var UserSchema = new mongoose.Schema({


    username: { type: String, required: true },
    email: { type: String, required: true },
    firstname: { type: String, required: true },
    lastname: { type: String, required: true },
    password: { type: String, required: true },
    chargeApiId: { type: String, required: false },
    address: { type: String, required: false },
    state: { type: String, required: true },
    county: { type: String, required: true },
    businessname: { type: String, required: false },
    updated_date: { type: String, default: moment(new Date()).format("DD/MM/YYYY HH:mm:ss") },
    activated: {type: Boolean, required: false},
    active_sub: {type: String, required: false},
    lastlogin: { type: String, required: false },
    datecreated: { type: String, required: true }
  });

  var User = mongoose.model('User', UserSchema);

module.exports = User;

module.exports.test = function(id, callback) {
  console.log('test');
  User.findById(id, callback);
}

module.exports.getUserById = function(id, callback) {
  User.findById(id, callback);
  
}

module.exports.getUserByUsername = function(username, callback) {
    const query = {username: username};
    User.findOne(query, callback);
}

// Method to compare password for login
module.exports.comparePassword = function (candidatePassword, res, callback) {
    bcrypt.compare(candidatePassword, res, (err, isMatch) => {
      if (err) { return callback(err); }
      callback(null, isMatch);
    });
  };

//password hashing
module.exports.bcyprtPw = function (password) {

    var salt = bcrypt.genSaltSync(10);
    var hash = bcrypt.hashSync(password, salt);
    console.log(hash);
    return(hash);
}

Изменение: я нашел эту статью, кажется, это может быть настройка в самой мангусты. Есть идеи, как это исправить?

Как я могу взаимодействовать с MongoDB через Mongoose без Express?

  • 0
    Можете ли вы поделиться своим кодом user.js
  • 0
    Любое обновление по этому поводу?
Теги:
mongoose

1 ответ

0

Я думаю, что вы должны экспортировать свои функции из файла user.js как

module.exports = { User , test, getUserById , ..etc}

И импортировать необходимые функции как

 const { User , test, getUserById } = require("./user.js");

Вы также можете обратиться к этому ответу.

Объявите несколько module.exports в Node.js

  • 0
    Разве это не просто создание пользовательских методов для схемы? Я просто пытаюсь использовать встроенные методы, которые пришли с мангуста. Все они нормально работают в моем файле роутера, но я пытаюсь использовать их без экспресса в другом файле.
  • 0
    Пожалуйста, проверьте, я отредактировал свой ответ согласно вашему комментарию.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню