【发布时间】:2022-03-15 17:37:00
【问题描述】:
我正在尝试将用户添加到我在 MongoDB 中的用户集合中。我正在将猫鼬与 NodeJS 和 Typescript 一起使用,当我尝试运行该项目时,出现错误:
The 2nd parameter to `mongoose.model()` should be a schema or a POJO
at Mongoose.model
错误表明问题出在此文件中:
import { Router, Request, Response } from "express";
const UserType = require("../enums/UserType");
const UserSchema: mongoose.Schema = require("../schemas/UserSchema");
import mongoose from "mongoose";
import { v4 as uuidv4 } from "uuid";
export class UserRouter {
router: Router;
private userSchema = mongoose.model("UserSchema", UserSchema, "Users");
constructor() {
this.router = Router();
this.init();
}
init() {
this.router.post("/create", this.createUser);
}
//@ts-ignore
async createUser(req: Request, res: Response) {
const uid = uuidv4();
const info = req.body;
var user = new this.userSchema({
uid: uid,
username: info.username,
password: info.password,
type: UserType.User,
});
console.log(user);
}
}
const userRouter = new UserRouter();
const router = userRouter.router;
export default router;
UserSchema 是mongoose.Schema<any> 类型,当用指针悬停在它上面时,会弹出:const UserSchema: mongoose.Schema<any>
这是我的用户架构:
import mongoose from "mongoose";
const UserSchema = new mongoose.Schema({
uid: {
type: String,
required: true,
unique: true,
},
username: {
type: String,
required: true,
unique: true,
},
password: {
type: String,
required: true,
},
type: {
type: Number,
required: true,
},
createdAt: {
type: Date,
default: Date.now,
},
});
module.exports = mongoose.model("UserSchema", UserSchema);
为什么我一直收到此错误消息,即使看起来错误不应该存在?
【问题讨论】:
-
您导出的是模型,而不是 UserSchema 文件中的架构:
module.exports = mongoose.model("UserSchema", UserSchema) -
@CuongLeNgoc 谢谢,我应该如何导出这个?因为它看起来确实像我在 UserSchema 中执行 gt mongoose.Schema
-
您可以更改您的要求:
const UserSchema = require("../schemas/UserSchema");然后使用UserSchema而不是您的userSchema -
将您的 UserSchema 文件重命名为 User 然后
const User = require("../schemas/User");可能会更好,因为您导出的是模型,而不是架构。 -
@CuongLeNgoc 谢谢,但我有一个 User 类,所以我想这会令人困惑。我编写 User 类的目的是只向用户发送相关信息(例如,不是密码和 createdAt),我是否走在正确的轨道上?