UserModel不可分配给Document | Type类型的参数nulll [带打字稿的猫鼬]

时间:2018-10-27 11:37:40

标签: javascript node.js typescript express mongoose

打字稿给我一个错误。该错误是由于以下事实造成的:猫鼬期望搜索的诺言将以猫鼬文档(在这种情况下为用户的文档)或“空”来解决。  但是我想访问所有用户的方法,因此我必须指定该函数将用户的模型作为参数。但这件事导致我以下错误:

类型'(user:UserModel)=>响应的参数不能分配给类型'(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);

1 个答案:

答案 0 :(得分:1)

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

export default model("User", UserSchema);

具有:

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

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