egg学习笔记第二十九天:eggjs中使用mongoose

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.

相关文章
相关标签/搜索