一、准备工作
1、 创建一个 eggjs 项目
js
mkdir ~/Desktop/base-cli-server & cd ~/Desktop/base-cli-server
npm init egg --type=simple
npm inpm run dev
open http://localhost:7001
2、安装和启动 mongodb
本案例为macos本地实现
- 启动:
mongod --dbpath /usr/local/var/mongodb --logpath /usr/local/var/log/mongodb/mongo.log --fork
- 验证是否启动:
ps aux | grep -v grep | grep mongod
- 关闭:
kill -9 pid

3、数据库可视化工具
安装完毕之后,首先终端启动 mongodb,然后启动 studio 3T,选择快速创建连接,暂不设置用户不设置权限连接

由于 MongoDB 实例目前没有创建任何用户,也就是 没有启用认证(auth)。可以无需用户名和密码就能连接,连接字符串可以写成:
mongodb://localhost:27017/base-cli
如果你需要启用认证(本次实践暂不设置),下一步就是创建用户:
js
use admin
db.createUser({
user: "admin",
pwd: "你的密码",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
4、 下面介绍 studio 3T 的使用(外篇)
- 创建数据库

- 创建数据集合
在创建表的同时创建字段并且进行验证规则约束
js
{
"$jsonSchema": {
"bsonType": "object",
"required": ["name", "age", "email"],
"properties": {
"name": { "bsonType": "string" },
"age": { "bsonType": "int", "minimum": 18 },
"email": { "bsonType": "string", "pattern": "^.+@.+\..+$" }
}
}
}

如果在创建表的同时没有创建验证规则也是可以的
- 查看集合验证规则

- 添加多条记录
js
db.getCollection("test_table").insertMany([
{ name: "Alice Johnson", age: 25, email: "alice.j@example.com" },
{ name: "Bob Chen", age: 30, email: "bob.chen@work.org" },
{ name: "Carlos López", age: 22, email: "carlos@example.es" },
{ name: "王芳", age: 18, email: "wang.fang@example.cn"},
{ name: "Emily O'Connor", age: 27, email: "emily@sub.domain.net"}
]);

- 查询记录
db.getCollection( "test_table" ) .find({})


二、项目实现
1、创建数据库和表
使用 studio3T 创建一个数据库 base-cli
,base-cli
下创建一个表 product_table
,其验证规则为:
js
{
"$jsonSchema": {
"bsonType": "object",
"required": [
"name",
"price",
"stock",
"category",
"tags"
],
"properties": {
"name": {
"bsonType": "string",
"minLength": 2.0,
"maxLength": 100.0,
"description": "商品名称,2-100字符"
},
"price": {
"bsonType": "double",
"minimum": 0.01,
"maximum": 100000.0,
"description": "价格必须为正数,单位为元"
},
"stock": {
"bsonType": "int",
"minimum": 0.0,
"maximum": 1000000.0,
"description": "库存必须为非负整数"
},
"category": {
"bsonType": "string",
"enum": [
"数码",
"家纺",
"家电",
"食品",
"玩具"
],
"description": "商品分类必须是预定义值之一"
},
"tags": {
"bsonType": [
"array"
],
"minItems": 1.0,
"maxItems": 10.0,
"uniqueItems": true,
"items": {
"bsonType": "string",
"minLength": 1.0,
"maxLength": 20.0
},
"description": "标签数组,1-10个不重复字符串"
}
}
}
}
js
db.getCollection("product_table").insertMany([
{
"name": "无线蓝牙耳机",
"price": 299.99,
"stock": 150,
"category": "数码",
"tags": ["蓝牙5.0", "降噪", "长续航"]
},
{
"name": "纯棉四件套",
"price": 458.45,
"stock": 80,
"category": "家纺",
"tags": ["纯棉", "北欧风", "抗菌", "加厚"]
},
{
"name": "变频空调",
"price": 3299.43,
"stock": 25,
"category": "家电",
"tags": ["节能", "静音", "智能控制", "冷暖"]
},
{
"name": "黑巧克力礼盒",
"price": 128.84,
"stock": 300,
"category": "食品",
"tags": ["可可70%", "无蔗糖", "比利时进口"]
},
{
"name": "编程机器人",
"price": 599.04,
"stock": 45,
"category": "玩具",
"tags": ["STEM教育", "可编程", "传感器", "互动", "锂电池"]
}
])
查询是否插入成功

2、创建连接 mongodb 数据库的配置文件
-
安装依赖库
@pick-star/cli-mongodb
jsnpm i -s @pick-star/cli-mongodb
-
创建文件
config/db.js
由于本地安装的 mongodb 并没有设置任何用户,所以无需用户名和密码连接
js
const mongodbUrl = 'mongodb://127.0.0.1:27017';
const mongodbName = 'base-cli';
module.exports = {
mongodbUrl,
mongodbName,
};
- 创建文件
app/utils/mongo.js
js
const mongodb = require('@pick-star/cli-mongodb');
const { mongodbUrl, mongodbName } = require('../../config/db');
function mongo() {
return new mongodb(mongodbUrl, mongodbName);
}
module.exports = mongo;
3、创建路由
app/router.js
下添加指向控制器project 的路由
js
module.exports = app => {
const { router, controller } = app;
router.get('/project/getTemplate', controller.project.getTemplate);
};
4、创建控制器
app/controller/project.js
js
const { Controller } = require('egg');
const mongo = require('../utils/mongo');
class projectControler extends Controller {
async getTemplate() {
const { ctx } = this;
let data = null;
data = await mongo().query('product_table');
ctx.body = data;
}
}
module.exports = projectControler;
5、访问验证
浏览器访问http://127.0.0.1:7001/project/getTemplate
,可以得到以下输出说明成功
