Экспорт текста по умолчанию всегда выполняется - PullRequest
0 голосов
/ 01 февраля 2020

Как новичок в node js Я не могу обернуться вокруг следующей проблемы.

import { createSchema, Type, typedModel } from "ts-mongoose";

const CompanySchema = createSchema(
  {
    companyName: Type.string({ required: true, unique: true })
  },
  {
    timestamps: true
  }
);

const Company = typedModel("Company", CompanySchema);

export { CompanySchema, Company };

Все это прекрасно работает до одной точки. При попытке импортировать этот файл.

import {CompanySchema, Company} from "./Company";

Он выполняет метод typeModel и сохраняет схему, как и ожидалось. Однако любой другой импорт этого файла Company.ts снова запускает этот метод typeModel. Который тогда терпит неудачу, потому что я могу зарегистрировать схему с именем только один раз. Как я мог предотвратить повторный запуск этого и при этом сохранить доступ к этому объекту?

Каков общий подход к этому, чтобы сохранить доступ как к объекту CompanySchema, так и к объекту Company (поскольку они будут позже использоваться в другой схеме как ссылка)?

1 Ответ

0 голосов
/ 01 февраля 2020

Я не знаю, что такое createSchema и typedModel (если они являются функциями, созданными вами или частью mon goose, версии mon goose, с которыми я работал, не имели этих функций)

... но я думаю, что вы не должны создавать createSchema, а определять его вместо этого

например

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// define schema
const messageSchema = Schema({
    sender: { type: Schema.Types.ObjectId, ref: 'User' },
    recipient: { type: Schema.Types.ObjectId, ref: 'User' },
    createdAt: { type: Date, default: Date.now },
    deletedAt: { type: Date, default: undefined },
    readAt: { type: Date, default: undefined},
    message: { type: String, maxlength: 5000 }
});

// create a model based on that schema
const Message = mongoose.model('Message', messageSchema);

// Export the message model ... not the schema

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