【架构师(第十四篇)】脚手架之 egg.js 和 mongodb 的使用

1,281 阅读2分钟

脚手架后端项目创建

egg.js 工程初始化

新建一个文件夹 hzw-dev-cli-server,进入文件夹

执行以下命令,全部默认即可。

npm init egg --type=simple
npm i
npm run dev

然后会给你生成一个链接

image.png

打开会出现以下界面,就说明一个 egg 的程序启动成功了。

image.png

添加 API

新建 app\controller\project.js

// app\controller\project.js
'use strict';

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

class HomeController extends Controller {
  async index() {
    const { ctx } = this;
    ctx.body = [{ a: 1, b: 2 }];
  }
}

module.exports = HomeController;

修改 app\router.js

// app\router.js
'use strict';

/**
 * @param {Egg.Application} app - egg application
 */
module.exports = app => {
  const { router, controller } = app;
  router.get('/', controller.home.index);
  router.get('/project', controller.project.index);
};

访问 http://127.0.0.1:7001/project

image.png

这样一个 api 就添加成功了。

然后整理一下工程,删掉没用的东西,再稍微改一下刚才写的代码。

// app\controller\project.js
const Controller = require('egg').Controller;

class HomeController extends Controller {
  async getTemplate() {
    const { ctx } = this;
    ctx.body = 'get template';
  }
}

module.exports = HomeController;
// app\router.js
module.exports = app => {
  const { router, controller } = app;
  router.get('/project/gettemplate', controller.project.getTemplate);
};

image.png

修改Hosts

可以使用 switchHosts 这个软件来管理本地的 host

只需要加上这样一行就可以实现用域名访问本地开发环境了

image.png

现在我们访问 http://www.duwanyu.com:7001/project/gettemplate

结果是一样的

image.png

mongodb 的使用方法

本地 mongodb 安装

👉👉 下载地址

image.png

下载完全都默认安装即可。

找到 bin 目录下,运行 mongo.exe,出现以下画面即说明启动成功。

 

在浏览器中输入:http://localhost:27017/

出现如下界面即可:

 

第二次打开 mongo.exe 失败,在 D 盘根目录新建 data/db 目录,然后 cmd 执行 .\mongod -dbpath d:\data\db , 问题解决。

mongodb compass

官网下载安装以后,通过 mongodb://127.0.0.1:27017 连接本地数据库

image.png

通过可视化工具添加一个数据库,并创建一个集合,然后添加一条数据。

image.png

image.png

可以看到数据库和集合已经创建好了,通过 add data 按钮添加数据

image.png

image.png

这样一条数据就插入完成了。

image.png

命令行操作

我是直接把 mongod.exe 添加到了 windows terminal 里面,这样就可以快速的使用命令行去操作数据库了。

image.png

  • show dbs: 列出所有数据库。
  • use hzw-cli-dev: 切换到 hzw-cli-dev 数据库
  • db: 当前数据库
  • show collections: 列出当前数据库下所有集合
  • db.template.find(): 查询集合中的数据

image.png

egg.js 连接本地 mongodb 数据库

引入 @pick-star/cli-mongodb 工具,然后修改对应代码

npm i -S @pick-star/cli-mongodb

app\utils\mongodb.js

const Mongodb = require('@pick-star/cli-mongodb');

const { mongodbDbName, mongodbUrl } = require('../../config/db');

// 生成封装的 mongodb 实例 ,用来操作数据库
function mongo() {
  return new Mongodb(mongodbUrl, mongodbDbName);
}

module.exports = mongo;

config\db.js

// 数据库地址
const mongodbUrl = 'mongodb://127.0.0.1:27017';
// 数据库名称
const mongodbDbName = 'hzw-cli-dev';

module.exports = {
  mongodbUrl,
  mongodbDbName,
};

app\controller\project.js

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

const mongo = require('../utils/mongodb')();

class ProjectController extends Controller {
  async getTemplate() {
    const { ctx } = this;
    // 查询 template 集合的数据
    const data = await mongo.query('template');
    ctx.body = data;
  }
}

module.exports = ProjectController;

好的,结果已经拿到了。

image.png