1、egg中使用Mongoose
一、在egg项目中安装mongoosejavascript
cnpm i mongoose --save
二、 在config>plugin.js配置egg-mongoose插件java
exports.mongoose = { enable: true, package: "egg-mongoose" };
三、在config>config.default.js配置数据库链接地址mongodb
config.mongoose = { client: { // url: "mongodb://eggadmin:123456@localhost:27017/eggcms", //有用户名密码的状况 url: "mongodb://127.0.0.1/eggcms", //无用户名密码的状况 options: {} } };
四、在app文件夹下新建model文件夹,里面放数据库表模型food,食物表。(food表)数据库
module.exports = app => { const mongoose = app.mongoose; // 引入创建链接的mongoose const Schema = mongoose.Schema; // 数据库表映射 const FoodSchema = new Schema({ foodName: { type: String }, // 食物名称 foodPrice: { type: Number }, // 食物价格(斤) foodColor: { type: String }, // 食物颜色 foodSeason: { type: String } // 食物季节 }); return mongoose.model("Food", FoodSchema, "food"); };
五、定义两个路由一个查询食物表数据,一个增长食物表数据。npm
"use strict"; /** * @param {Egg.Application} app - egg application */ module.exports = app => { const { router, controller } = app; router.get("/", controller.home.index); router.get("/findFood", controller.home.findFood); router.get("/addFood", controller.home.addFood); };
六、controller中的方法:app
"use strict"; const Controller = require("egg").Controller; class HomeController extends Controller { async index() { const { ctx } = this; ctx.body = "hi, egg"; } // 查询食物表 async findFood() { const { ctx } = this; var result = await ctx.service.food.getFoodList(); console.log(result); ctx.body = result; } // 增长食物表 async addFood() { const { ctx } = this; var food = new ctx.model.Food({ foodName: "炒米饭", // 食物名称 foodPrice: 12, // 食物价格(斤) foodColor: "白", // 食物颜色 foodSeason: "四季" // 食物季节 }); var result = await food.save(); ctx.body = result; } } module.exports = HomeController;
七、service中新建food.jsasync
const Service = require("egg").Service; class FoodService extends Service { async getFoodList() { // 查询food表中的数据 return await this.ctx.model.Food.find({}); } } module.exports = FoodService;
八、连续访问addFood可得响应:mongoose
九、访问findFood路径,能够查出比表中数据:ui
十、在定义一个删除,一个修改的路由this
"use strict"; /** * @param {Egg.Application} app - egg application */ module.exports = app => { const { router, controller } = app; router.get("/", controller.home.index); router.get("/findFood", controller.home.findFood); router.get("/addFood", controller.home.addFood); router.get("/editFood", controller.home.editFood); router.get("/deleteFood", controller.home.deleteFood); };
十一、控制器写入:
"use strict"; const Controller = require("egg").Controller; class HomeController extends Controller { async index() { const { ctx } = this; ctx.body = "hi, egg"; } // 查询食物表 async findFood() { const { ctx } = this; var result = await ctx.service.food.getFoodList(); console.log(result); ctx.body = result; } // 增长食物表 async addFood() { const { ctx } = this; var food = new ctx.model.Food({ foodName: "炒拉条", // 食物名称 foodPrice: 22, // 食物价格(斤) foodColor: "黄", // 食物颜色 foodSeason: "四季" // 食物季节 }); var result = await food.save(); ctx.body = result; } // 增长食物表 async editFood() { const { ctx } = this; var result = await this.ctx.model.Food.updateOne( { foodName: "炒拉条" }, { foodName: "兰州拉面", // 食物名称 foodPrice: 8, // 食物价格(斤) foodColor: "白", // 食物颜色 foodSeason: "夏天" // 食物季节 }, function(err, result) {} ); ctx.body = result; } // 增长食物表 async deleteFood() { const { ctx } = this; var result = await this.ctx.model.Food.deleteOne({ foodName: "兰州拉面" }); ctx.body = result; } } module.exports = HomeController;
十二、执行editFood可得: 炒拉条变成了兰州拉面
1三、访问deleteFood得: 兰州拉面那条数据删除成功
以上是使用egg-mongoose实现数据增删改查的简单demo.