javascript - UserModel 不可分配给文档类型的参数 | nulll [带 typescript 的 Mongoose ]

标签 javascript node.js typescript express mongoose

typescript 给我一个错误。该错误是由于 mongoose 期望搜索 promise 将使用 mongoose 文档(在本例中为用户文档)或“null”解析。 但是我想访问所有用户的方法,所以我必须指定该函数将用户的模型作为参数。但是这件事导致我出现以下错误:

“(user: UserModel) => Response”类型的参数不可分配给“(res: Document | null) => void |”类型的参数回复 | PromiseLike'。

这是代码:

    import express, { Request, Response } from "express";


   import User, { UserModel } from "../../models/User";
    // router
    const router = express.Router();

    // @route   GET api/user/username/:username
    // @access  Public

    router.get("/username/:username", (req: Request, res: Response) => {
      User.findOne({ username: req.params.username })
        .then((user: UserModel | null) => res.json(user))
        .catch(err => res.json(err));
    });

    export default router;

这是用户的模型:

import mongoose, { Schema, model } from "mongoose";

export type UserModel = mongoose.Document & {
  name: string; 
  username: string;
  email: string; 
  password: string; 
  avatar: string;
  created_at: Date; 
};


export const UserSchema = new Schema({

  name: {
    type: String,
    required: true
  },

  username: {
    type: String,
    required: true,
    unique: true
  },

  email: {
    type: String,
    unique: true
  },

  password: {
    type: String,
    required: true
  },

  avatar: {
    type: String
  },

  created_at: {
    type: Date,
    default: Date.now
  }
});

export default model("User", UserSchema);

最佳答案

model 函数接受集合文档类型的类型参数。 (它信任你;它没有任何方法来验证类型是否正确。)替换:

export default model("User", UserSchema);

与:

export default model<UserModel>("User", UserSchema);

然后对该集合的所有查询都将生成 UserModel 对象。

关于javascript - UserModel 不可分配给文档类型的参数 | nulll [带 typescript 的 Mongoose ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53021514/

相关文章:

javascript - 进行异步 AJAX 调用后运行函数,传递变量

apache - 是什么让 Node.js 比 Apache 更具可扩展性?

typescript - 如何向 TypeScript 添加对 WebGL 等浏览器功能的支持?

typescript :是否主动允许计算的对象键?

java - 类路径或引导类路径中的 fatal error : Unable to find package java. lang

Angular 4组件双向绑定(bind)问题

javascript - 从 gulp 任务运行 npm 脚本

javascript - 我是否需要创建第三个累加器来保存此 while 循环中的项目类型?

javascript - 编写 ECMAScript5 兼容代码

javascript - 如何将 Etc/GMT+2 时区的时间戳转换为 unix 时间戳?