node.js - 在不捆绑 ORM 的情况下在前后端之间进行类型共享

标签 node.js typescript mongoose

在全栈 typescript 项目中,我希望在前端项目中共享我在后端项目中使用的接口(interface)/类型,以避免代码重复并保持一致性。

通过搜索我发现这可以通过使用这些类型的第三个“共享”项目然后使用 typescript 的引用项目来包含它来完成。

所以我会有一个前端项目、后端项目和一个将由前两个项目引用的共享项目。

虽然我的类型扩展了 mongoose 的 Document 类型,但为了在前端和后端使用相同的类型,需要将 mongoose 捆绑在前端项目中。

在不将额外的后端包捆绑到前端的情况下共享这些接口(interface)/类型的正确方法是什么? (并保留来自 Document 扩展的 _id 属性)。

RoadBook.ts(IRoadBook是要共享的接口(interface)/类型和mongoose schema,模型声明)

import mongoose, {Schema,Model,Document} from 'mongoose';

export interface IRoadBook extends Document {
    Name  : string;
    Description : string;
}

const RoadBookSchema = new Schema({
    Name : {type : String, required : true, unique: true},
    Description : {type : String }
});

export default mongoose.model<IRoadBook>('RoadBook',RoadBookSchema);

后端是一个简单的 typescript/express/mongoose 应用程序,前端是一个 react webapp,这可能很重要。

提前谢谢你。

最佳答案

你可以做的是在你的 ORM 中定义 IRoadBook 接口(interface),它不扩展 Document 除了你在前端和后端都需要的成员结尾。然后,在后端定义模式。

ORM

export interface IRoadBook {
    _id: string; // or ObjectID or whatever type mongoose.Document['_id'] is
    Name: string;
    Description: string;
}

后端

import mongoose, { Schema, Model, Document } from 'mongoose';
import { IRoadBook } from 'my-orm';

const RoadBookSchema = new Schema({
    Name: { type: String, required: true, unique: true },
    Description: { type: String }
});

export default mongoose.model<IRoadBook & Document>('RoadBook', RoadBookSchema);

关于node.js - 在不捆绑 ORM 的情况下在前后端之间进行类型共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59632587/

相关文章:

javascript - 混合 Node 和 amd 模块时 requirejs() 返回未定义

node.js - Node - 无法寻找音频流

javascript - Angular 6 : unable to retrieve all form Control value in HTML using {{form. 值 | JSON}}

angular 2 Routes 3.0,区分大小写

javascript - 如何在 MongoDB 连接上修复 'MongoParseError: Multiple text records not allowed at ...'

node.js - Mongoose 子查询并将结果附加到主查询

node.js - 在 Mongoose 中获得最大值

node.js - 如何发送 Reporting API 报告跨域 (Report-To) header

javascript - Mongoose 如何在现有对象上插入元素(MongoDB 和 Node.js)

javascript - 使用用户名获取文档引用