Я помню, что у меня была похожая проблема с webpack / typescript.
Попробуйте экспортировать модуль как
module.exports.User = User;
и импортировать весь индексный файл БД без использования деструктора ... просто чтобы увидеть если это что-то меняет.
const models = require('../db/models');
const user = new models.User(...);
В моем случае это было то, что веб-пакет испортил импорт.
Быстрое редактирование: я создал ту же настройку, что и вы (с последний пн goose).
// models file
const userSchema = new Schema({
message: { type: String, maxlength: 5000 }
});
const User = mongoose.model('User', userSchema);
module.exports.User = User;
// another file
const { User } = require('./testmodels.js');
console.log('==>', User );
will log out
==> function model(doc, fields, skipId) {
model.hooks.execPreSync('createModel', doc);
if (!(this instanceof model)) {
return new model(doc, fields, skipId);
}
const discriminatorKey = model.schema.options.discriminatorKey;
if (model.discriminators == null || doc == null || doc[discriminatorKey] == null) {
Model.call(this, doc, fields, skipId);
return;
}
// If discriminator key is set, use the discriminator instead (gh-7586)
const Discriminator = model.discriminators[doc[discriminatorKey]] ||
getDiscriminatorByValue(model, doc[discriminatorKey]);
if (Discriminator != null) {
return new Discriminator(doc, fields, skipId);
}
// Otherwise, just use the top-level model
Model.call(this, doc, fields, skipId);
}
Просто из любопытства, что произойдет, если вы попытаетесь вызвать конструктор следующим образом.
let user = new User.User({
username : username,
password : password,
name : name,
email : email
});
Еще одно обновление: я опробовал ваш пример код, и он работает для меня (я также проверил с последней версией Mon go, и он все еще работал). Единственное, что мне пришлось изменить в вашем примере, это строка экспорта модуля, куда вы экспортировали только MK, а не модель User.
module.exports = {User, SigningKey, MK};