egg 自學入門demo分享

Hewitt發表於2019-02-16

2018-08,本文適用於對egg有興趣想要了解的同學

完整專案程式碼:https://github.com/NameHewei/node-egg

專案主要檔案目錄結構

|—— app
    |—— controller
        |—— cook.js
    |—— model
        |—— cook.js
    |—— router.js
|—— config
    |—— config.default.js
    |—— plugin.js
|—— package.json
|—— README.md

安裝

官網: https://eggjs.org/zh-cn/

  1. npm i egg-init -g
  2. egg-init egg-example –type=simple
  3. cd egg-example
  4. npm i

啟動專案

  • npm run dev

專案

本文主要是以搭建一個連線mongoDB的後端,以提供api介面

連線資料庫

1.引入資料庫外掛,在plugin.js檔案中新增如下程式碼

exports.mongoose = {
    enable: true,
    package: `egg-mongoose`,
};

2.在config.default.js中新增如下配置

config.mongoose = {
    client: {
        url: `mongodb://127.0.0.1:27017/database-name`,
    },
}

編寫model

在model檔案下新增,cook.js 檔案

module.exports = app => {
    const mongoose = app.mongoose;
    const Schema = mongoose.Schema;

    const CookeSchema = new Schema({
        _id: { type: Schema.Types.ObjectId },
        name: { type: String  },
        img: { type: String  },
        step: { type: String  }
    }, { 
        versionKey: false
    });

    return mongoose.model(`cooks`, CookeSchema);
}

注意如果使用mongoDB中的_id時type的型別,以及如何去掉__v 版本鎖欄位。

編寫controller

在controller資料夾下新增,cook.js檔案

const Controller = require(`egg`).Controller;

class HomeController extends Controller {
  async list() {
    this.ctx.response.body = {
      result: await this.ctx.model.Cook.find({}, {`_id`: 0})
    };
  }

  async listOne() {
    const { id } = this.ctx.params
    this.ctx.body = {
      result: await this.ctx.model.Cook.find({ `_id`: id }, {`_id`: 0})
    };
  }
}

module.exports = HomeController;

這裡用於獲取資料庫中的資料

新增路由

module.exports = app => {
  const { router, controller } = app;
  router.get(`/cook/`, controller.cook.list);
  router.get(`/cook/:id`, controller.cook.listOne);
};

確保資料庫能連線成功後,便可以啟動專案。

本文只是輔助介紹快速搭建一個基本的egg專案,具體內容請參考:https://eggjs.org/

若有疑問或錯誤,請留言,謝謝!Github blog issues

相關文章