mongodb - 使用 Typescript 和 Mongodb 应该如何定义文档的接口(interface)?

标签 mongodb typescript

考虑一个简单的用户集合:

// db.ts
export interface User {
      _id: mongodb.ObjectId;
      username: string;
      password: string;
      somethingElse: string;
}

// user.ts
import {User} from "../db"
router.get("/:id", async (req, res) => {
    const id = req.params.id;
    // user._id is a mongodb.Object.
    const user: User = await db.getUser(id);

    res.send(user);
});

// index.ts
// code that will runs on browser
import {User} from "../../db"
$.get('/user/...').done((user: User) => {
    // user._id is string.
    console.log(user._id);
});

在我想在客户端代码中使用此接口(interface)之前,它可以完美运行。因为用户的 _id 在从服务器作为 json 传输时变成了一个十六进制字符串。如果我将 _id 设置为 mongodb.ObjectId |字符串,行为变得奇怪。 enter image description here

最佳答案

您可以尝试以巧妙的方式将它们分开:

interface User {
   username: string;
   password: string;
   somethingElse: string;
}

export interface UserJSON extends User {
   _id : string
}

export interface UserDB extends User {
   _id : mongodb.ObjectId
}

然后采用 UserJSON(客户端)或 UserDB(服务器端)。

关于mongodb - 使用 Typescript 和 Mongodb 应该如何定义文档的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37157994/

相关文章:

node.js - 在 typescript 中使用 fs

typescript - Angular2 canActivate() 调用异步函数

node.js - 无法使用 Node.js 从 MongoDB slave 读取

mongodb - 基于mongodb的$lookup中的$sort的结果

java.net.SocketException : No buffer space available (maximum connections reached? ): 连接 MongoDB JAVA API 驱动程序

typescript - 在 Angular2 rc1 中基于路由隐藏元素

jquery - Visual Studio 2019 - 添加客户端库(TypeScript、JQuery 等)的正确方法

mongodb - MongoDB 中是否可以对嵌入文档执行条件查询?

MongoDB - 现在可以限制 32 MB 文档大小吗?

angular - HTTP 请求效率 Angular 4+