所以我有一个Node / w Typescript REST API,我有一个注册方法,该方法可以创建用户并使用创建的用户firstName,lastName,email进行响应。
问题是我遇到此打字稿错误,提示“类型'文档'缺少类型'保存的用户'的以下属性:名字,姓氏,电子邮件”。
我相信在我的SavedUser界面中添加mongoose.Document类型会有所帮助,我不确定,谢谢您的帮助!
示例代码:
interface SavedUser {
firstName: string
lastName: string
email: string
}
...
public async signUp(req: Request, res: Response): Promise<void | Response> {
const salt: string = await bcrypt.genSalt(10)
const hashedPassword: string = await bcrypt.hash(req.body.password, salt)
const user = new User({
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email,
password: hashedPassword
})
try {
const { firstName, lastName, email }: SavedUser = await user.save()
return res.status(200).send({
firstName,
lastName,
email
})
} catch (err) {
return res.status(400).send(err)
}
}
答案 0 :(得分:0)
我不知道确切的问题出在哪里,但这是我如何使用TypeScript创建猫鼬模式,并且对我有用。
import * as mongoose from 'mongoose';
interface SavedUserDocument extends mongoose.Document {
firstName: string;
lastName: string;
email: string;
}
const SavedUserSchema = new mongoose.Schema({...});
export const SavedUser = mongoose.model<SavedUserDocument>('saveduser', SavedUserSchema);
希望它也对您有用。
答案 1 :(得分:0)
猫鼬在.save()
上返回更多,然后您当前正在使用SavedUser界面进行指定。
从猫鼬中获取所有类型的最简单方法是使用导出的Document
并扩展您的界面。
import { Document } from 'mongoose';
export interface SavedUser extends Document {
email: string;
firstName: string;
lastName: string;
}
答案 2 :(得分:0)
感谢您的回答,我解决了!我混合了dijkstra和phw的答案,并得出以下结论:
在我的用户模型中
// user.ts
import { Schema, model, Document } from 'mongoose'
const userSchema = new Schema({
firstName: {
type: String,
required: true,
min: 2,
max: 255
},
lastName: {
type: String,
required: true,
min: 2,
max: 255
},
email: {
type: String,
required: true,
unique: true,
min: 6,
max: 255
}
})
export interface SavedUserDocument extends Document {
firstName: string;
lastName: string;
}
export const userSchemaModel = model<SavedUserDocument>('User', userSchema)
现在在我的用户控制器上:
// user.ts
import { userSchemaModel, SavedUserDocument } from '../../models/user/user'
...
public async signUp(req: Request, res: Response): Promise<void | Response> {
const user = new userSchemaModel({
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email
})
try {
const { firstName, lastName }: SavedUserDocument = await user.save()
return res.status(200).send({
firstName,
lastName,
message: 'User created'
})
} catch (err) {
return res.status(400).send(err)
}
}
...
我有一个问题;
如果我删除了<SavedUserDocument>
中的model<SavedUserDocument>('User', userSchema)
,我仍然会收到错误消息,请问我对此有很好的解释吗?我对Typescript还是比较陌生,很高兴得到一个解释,非常感谢!