【问题标题】:Typescript export default always executing打字稿导出默认始终执行
【发布时间】:2020-05-17 19:51:15
【问题描述】:

作为 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 对象的访问权(因为它们稍后将在另一个模式中用作参考),一般的方法是什么?

【问题讨论】:

    标签: javascript node.js typescript mongoose


    【解决方案1】:

    我不知道 createSchema 和 typedModel 是什么(如果它们是你创建的函数或 mongoose 的一部分,我使用的 mongoose 版本没有这些函数)

    ...但我认为你不应该“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;
    

    【讨论】:

    • op 正在使用ts-mongoose
    猜你喜欢
    • 2017-02-06
    • 2016-01-23
    • 2016-02-10
    • 2019-12-11
    • 2021-02-07
    • 2018-04-17
    • 2017-09-23
    • 2021-11-24
    • 2020-04-13
    相关资源
    最近更新 更多