如注释中所述,您需要一个带有typegoose的示例,它是
TypeScript version of Mongoose
.
为了在typescript中使用decorator语法,请将其添加到tsconfig.json的编译器选项中:
"emitDecoratorMetadata": true,
"experimentalDecorators": true
所以,你可以安装
typegoose
这样地:
npm install --save typegooose mongoose reflect-metadata
npm install --save-dev @types/mongoose
或
yarn add typegoose mongoose reflect-metadata
yarn add -D @types/mongoose
在您的主端点文件(server.js或index.js)的顶部包括:
import 'reflect-metadata';
您可以这样连接到数据库:
import * as mongoose from 'mongoose';
mongoose.connect('mongodb://localhost:27017/test');
现在让我们定义您的用户模型:
import {
prop, Typegoose, pre
} from 'Typegoose';
// that's how you add a pre-hook
@pre<User>('save', function (next) {
// whatever you want to do here.
// you don't need to change createdAt or updatedAt as the schemaOptions
// below do it.
next()
})
// that's how you define the model
class User extends Typegoose {
@prop({ required: true, unique: true }) // @prop defines the property
userId: string; // name of field and it's type.
@prop()
fullName?: string;
@prop()
nickname?: string;
}
export const UserModel = new User().getModelForClass(User, {
schemaOptions: {
timestamps: true,
}
});
现在,您可以使用这样的模型:
import { UserModel } from './user'
(
async () => {
const User = new UserModel({
userId: 'some-random-id',
fullName: 'randomperson',
nickname: 'g0d'
});
await User.save();
// prints { _id: 59218f686409d670a97e53e0, userId: 'some-random-id', fullName: 'randomperson', nickname: 'g0d', __v: 0 }
console.log(User);
}
)();