Egg 配置mongoose

1.安裝
npm i egg-mongoose --save
2./config/plugin.js
exports.mongoose = {
enable: true,
package: 'egg-mongoose',
};
3./config/config.default.js
 
單一
exports.mongoose = {
url: 'mongodb://127.0.0.1/example',
options: {},
plugins: [createdPlugin, [updatedPlugin, pluginOptions]],
};
多個
exports.mongoose = {
clients: {
// clientId, access the client instance by app.mongooseDB.get('clientId')
db1: {
url: 'mongodb://127.0.0.1/example1',
options: {},
},
db2: {
url: 'mongodb://127.0.0.1/example2',
options: {},
},
},
};
4.使用(案例參考)
model/user/address (model文件夾 在app目錄下自己創建)
module.exports = app => {
const mongoose = app.mongoose;
const Schema = mongoose.Schema;
const {
ctx,
helper,
service
} = app.createAnonymousContext();
const {
objToQuery
} = helper;
const UserAddressSchema = new Schema({
// 用户id
_uid: {
type: Schema.Types.ObjectId,
ref: 'account_user',
required: true,
index: true
},
default_id: '',
addresses: [{
// 数组ID
_id: mongoose.Schema.Types.ObjectId,
// 收件人名称
name: '',
// 聯係電話
phone: '',
// 省市区地址
Region: '',
// 城市id
RegionId: '',
// 郵編
postcode: '',
// 详细地址
location: '',
// 地址标签
tag: ''
}]
}, {
timestamps: {
createdAt: 'created',
updatedAt: 'updated'
}
});
UserAddressSchema.statics = {
// 添加地址
addAddress: async function(_uid, BODYS) {
const { isDefault } = BODYS;
const _id = mongoose.Types.ObjectId();
const MODEL = this.findOneAndUpdate({
_uid
}, {
$push: {
'addresses': {
...BODYS,
_id
}
},
...isDefault && { default_id: _id }
}, {
new: true,
fields: 'addresses default_id -_id'
})
try {
const DATAS = await MODEL;
return !!DATAS.addresses.length
} catch (error) {
console.log(error)
return error
}
},
// 删除地址
deleteAddress: async function(_uid, _id) {
const MODEL = this.findOneAndUpdate({
_uid
}, {
$pull: {
'addresses': {
_id
}
}
})
try {
const DATAS = await MODEL;
console.log(DATAS)
return DATAS
} catch (error) {
console.log(error)
return error
}
},
// 更新地址
updateAddress: async function(_uid, BODYS) {
const { _id, isDefault } = BODYS;
delete BODYS._id;
delete BODYS.isDefault;
const MODEL = this.findOneAndUpdate({
_uid,
'addresses._id': _id
}, {
$set: {...objToQuery(BODYS, 'addresses')
}
}, {
fields: 'addresses default_id -_id'
});
try {
// 修改数据
const DATAS = await MODEL;

// 修改默认
!!isDefault && await this.setDefault(_uid, isDefault, _id);
return !!DATAS.addresses.length
} catch (error) {
console.log(error)
return error
}
},
// 設置默認
setDefault: async function(_uid, isDefaults, _id) {
const default_id = !!isDefaults ? _id : '';
const MODEL = this.findOneAndUpdate({ _uid }, { default_id });
try {
const MB = await MODEL;
return MB
} catch (error) {
console.log(error);
return error
}
},
// 获取单一地址
getOne: async function(_uid, _id) {
const MODEL = this.findOne({
_uid,
}, {
'addresses': {
'$elemMatch': {
_id
}
}
}, {
fields: 'addresses default_id -_id'
});
console.log(_id)
try {
if (_id !== "default") {
const DATAS = await MODEL;
return DATAS.addresses[0]
}
} catch (error) {
console.log(error)
return error
}
},
// 获取全部地址
getAllAddress: async function(_uid, query) {
const MODEL1 = this.findOneAndUpdate({ _uid }, { _uid, query }, { new: true, upsert: true, fields: 'addresses default_id -_id' });
// const MODEL2 = this.create({ _uid })
try {
const DATAS = await MODEL1;
return DATAS
// console.log(!!DATAS._uid)
// return DATAS._uid ? DATAS.addresses : (await MODEL2).addresses
} catch (error) {
console.log(error)
return error
}
},
// 獲取默認地址
getDefaultAddress: async function(_uid) {
const MODEL = this.findOne({ _uid }, {}, {
fields: 'default_id -_id'
});
try {
const { default_id } = await MODEL;
return await this.getOne(_uid, default_id)
} catch (error) {
console.log(error);
return error
}
}
}
return mongoose.model('user_address', UserAddressSchema);
}
controller/user/address (RESTful 風格)
const indexController = require('../index');
class invoiceAddressController extends indexController {
constructor(ctx) {
super(ctx);
this.MODEL = ctx.model.User.Address;
};
/**
* @name 获取所有用户地址列表
*
*/
async index() {
const ctx = this.ctx;
const isDefault = Object.keys(ctx.query).includes('default');
const RESULT = !!isDefault ?
await this.MODEL.getDefaultAddress(ctx._uid()) :
await this.MODEL.getAllAddress(ctx._uid());
ctx.body = RESULT
};
/**
* @name 获取用户地址列表
*/
async show() {
const ctx = this.ctx;
const RESULT = await this.MODEL.getOne(ctx._uid(), ctx.params.id);
ctx.body = RESULT
};
/**
* @name 创建地址
*/
async create() {
const ctx = this.ctx;
const {
name,
phone,
postcode,
Region,
RegionId,
location,
isDefault,
tag
} = ctx.request.body;
const BODYS = this.DUFN({
name,
phone,
postcode,
Region,
RegionId,
location,
isDefault,
tag
})
const RESULT = await this.MODEL.addAddress(ctx._uid(), BODYS);
ctx.body = RESULT
};
/**
* @name 更新
*
*/
async update() {
const {
ctx
} = this;
const _id = ctx.params.id
const {
name,
phone,
postcode,
Region,
RegionId,
location,
isDefault,
tag,
action
} = ctx.request.body;
const BODYS = this.DUFN({
name,
phone,
postcode,
Region,
RegionId,
location,
isDefault,
tag,
action,
_id
})
const RESULT = action === 'setDefault' ?
await this.MODEL.setDefault(ctx._uid(), isDefault, _id) :
await this.MODEL.updateAddress(ctx._uid(), BODYS);
ctx.body = RESULT
};
/**
* @name 删除
*/
async destroy() {
const ctx = this.ctx;
const RESULT = await this.MODEL.deleteAddress(ctx._uid(), ctx.params.id);
ctx.body = RESULT
}
}
module.exports = invoiceAddressController
router.js
router.resources('user_address', '/user/address', app.jwt, controller.user.address);

0 个评论

要回复文章请先登录注册