1.0.1 • Published 4 years ago
@akizuki/egg-typegoose v1.0.1
egg-typegoose
Install
$ npm i @akizuki/egg-typegoose --save
Usage
// {app_root}/config/plugin.ts
exports.typegoose = {
enable: true,
package: 'egg-typegoose',
};
Configuration
// {app_root}/config/config.default.ts
exports.typegoose = {
url: 'mongodb://localhost:27017/test',
options: {},
modelWhitelist: ['BaseModel'], // 文件白名单列表, 不挂载到ctx.model
};
see config/config.default.ts for more detail.
Example
├── controller
│ └── user.ts
├── model
│ ├── BaseModel.ts
│ └── User.ts
├── service
│ └── user.ts
├── router.ts
// {app_root}/app/controller/user.ts
import { Controller } from 'egg';
import User from '../model/User';
/**
* User Controller
*/
export default class UserController extends Controller {
/**
* 创建用户
*/
public async createUser() {
const { ctx } = this;
const user = new User();
user.email = 'test@qq.com';
user.nickname = 'YuYin';
const result = await ctx.service.user.createUser(user);
ctx.body = result;
}
/**
* 根据 email 获取用户
*/
public async getUserByEmail() {
const { ctx } = this;
const email = 'test@qq.com';
const result = await ctx.service.user.getUserByEmail(email);
ctx.body = result;
}
}
// {app_root}/app/model/BaseModel.ts
import { prop, pre } from '@typegoose/typegoose';
@pre<BaseModel>('save', function(next) {
if (!this.createdAt || this.isNew) {
this.createdAt = this.updatedAt = new Date();
} else {
this.updatedAt = new Date();
}
next();
})
/**
* Base Model
*/
class BaseModel {
/**
* 创建时间
*/
@prop()
createdAt: Date;
/**
* 更新时间
*/
@prop()
updatedAt: Date;
}
export default BaseModel;
// {app_root}/app/model/User.ts
import { prop } from '@typegoose/typegoose';
import BaseModel from './BaseModel';
/**
* User Model
*/
export class User extends BaseModel {
/**
* 邮箱
*/
@prop({ required: true, unique: true })
email!: string;
/**
* 昵称
*/
@prop()
nickname?: string;
}
export default User;
// {app_root}/app/service/User.ts
import { Service } from 'egg';
import User from '../model/User';
/**
* User Service
*/
export default class UserService extends Service {
/**
* 创建用户
* @param user User
*/
public async createUser(user: User) {
const { ctx } = this;
const result = await ctx.model.User.create(user);
return result;
}
/**
* 根据 email 获取用户
* @param email 邮箱
*/
public async getUserByEmail(email: string) {
const { ctx } = this;
const result = await ctx.model.User.findOne({ email });
return result;
}
}
// {app_root}/app/router.ts
import { Application } from 'egg';
export default (app: Application) => {
const { controller, router } = app;
router.post('/user/createUser', controller.user.createUser);
router.get('/user/getUserByEmail', controller.user.getUserByEmail);
};
Questions & Suggestions
Please open an issue here.