目录
跳转链接 : NodeJs_01 _ 学习笔记
跳转链接 : NodeJs_02 _ 学习笔记
跳转链接 : NodeJs_03 _ 学习笔记
目标
- 使用 art-template 进行视图展示
- 能够使用 mongoose 完成数据 curd 操作
- 使用 Node 操作 Mongodb
1、模板引擎
1.1、介绍
模板引擎( 这里特指用于 Web 开发的 模板引擎 )是为了使 用户界面 与 业务数据 分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的 HTML 文档。Nodejs 模板引擎有很多,其中比较常用的就是 Ejs 和 art-template 等模板引擎。
1.2、art-template
网址:art-template
art-template 是一个简约、超快的模板引擎。
模板引擎渲染速度测试
1.3、安装与配置 art-template
在 express 项目中通过 npm 来进行安装
npm i -S art-template express-art-template
1.4、语法
art-template 支持标准语法与原始语法。标准语法可以让模板易读写,而原始语法拥有强大的逻辑表达能力。标准语法支持基本模板语法以及基本 JavaScript 表达式;原始语法支持任意 JavaScript 语句,这和 Ejs 类似。
- 控制层返回数据
- 模板视图层输出显示
#### 子模板 --- 模板包含
{{include './header.art'}}
<% include('./header.art') %>
注:在子模板中不要有 html、head 和 body 标签
二、Mongodb
2.1、简介
Mongodb 是一个介于 关系数据库 和 非关系数据库 之间的产品 ( Nosql ) ,是非关系数据库当中功能最丰富,最像关系数据库的,语法有点类似 javascript 面向对象的查询语言,它是一个面向集合的,模式自由的 文档型数据库 。Mongodb 数据库旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。( 用来存储数据 )
- 关系型数据库 和 非关系型数据库 结构 区别
mongodb数据体系
2.2、安装软件
下载地址:MongoDB Community Download | MongoDB
下载 windows 的安装版本,进行安装,也可以网上下载免安装版本进行使用。
mac安装:Install MongoDB Community on macOS using .tgz Tarball — MongoDB Manual
- 下载压缩包文件
- brew install mongodb
https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-4.4.6.tgz
- 解压下载文件
tar -zxvf mongodb-macos-x86_64-4.4.tgz
- 移动目录
mv /xxx/mongodb-macos-x86_64-4.4 /usr/local/mongodb
// 创建数据目录
mkdir -p /usr/local/mongodb/data
mkdir -p /usr/local/ /mongodb/logs
// 启动
mongod --dbpath /usr/local/mongodb/data --logpath /usr/local/mongodb/logs/mongo.log --fork
服务启动的端口号为:27017 tcp协议
window : $ => netstat -ano | findstr 27017
mac : $ => lsof -nP -iTCP:27017
2.3、常用数据库指令
通过客户端的命令进入到 mongodb 服务中
打开 cmd 在命令行中输入命令
查看所有的数据库列表 $ => show dbs
创建数据库 或 切换数据库
use 数据数据库存在则切换,如果数据库不存在则创建并切换
$ => use 数据库名
use 创建的数据库只是一个空的数据库,没有集合,所以 show dbs 不显示空数据库
可以使用 db 命令来查看当前所在的数据库名称
给 mydb 数据库中创建一个 user 的集合,并向集合中添加文档数据
查看当前数据库中的集合列表
2.4、增删改查
2.4.1、添加
向集合中添加文档数据
# 添加单条文档数据
db.collection.insertOne( { key: value } )
# 添加多条文档数据
db.collection.insertMany( [{ }, { }, { }] )
# 可以添加单条也可以多条数据
db.collection.insert( { } )
db.collection.insert( [{ }, { } ] )
一次性添加多条记录
循环添加多条文档
2.4.2、删除
删除集合中已存在的文档数据
# 删除单条文档
db.collection.deleteOne( { key: value } )
# 删除符合条件多条文档
db.collection.deleteMany( { key: value } )
# 删除全部数据
collection.deleteMany({ });
key:value 表示 等于的 意思
删除单条符合条件的记录
删除符合条件的所有记录
删除所有的数据(慎用,最好不用)
2.4.3、查询 find
查看所有和指定字段
db.c1.find( ); # 获取全部
db.c1.find({ }); # 获取全部
# 条件
查询指定的字段
db.集合.find({条件}, {字段名:[0/1]}) 0 不要字段 显示 , 1 要记录 显示
# 字段值为1取出相对应字段数据 0 就表示不取出 _id默认会显示,只有指定为0才不会显示
db.c1.find({name:"user11"}, {name:1});
是否显示指定字段
查询指定字段值的要件
条件表达式查看
查询age>=5的文档记录
查询列举范围内的数据
且关系查询
或语法查询
模糊查询
中午 时间 到了 要吃饭
统计总记录数
# 统计记录数量 count
db.c1.count( );
db.c1.find( ).count( );
排序查询
分页查询
# 指定获取几条 skip / limit 分页
db.c1.find( ).limit(3);
db.c1.find( ).skip(1).limit(3);
2.4.4、修改
根据条件修改已存在集合中的文档数据
三、Node 操作 Mongodb
3.1、Mongoose 介绍
mongoose 是 Node 环境下异步操作 mongodb 数据库的扩展,仅限于 Node 环境下使用。
使用 mongoose 操作 mongodb 数据步骤:
- 使用 npm 安装 mongoose
- 导入模块,连接 mongodb 数据库
- 定义 Schema (类似于使用 mysql 时定义表结构)
- 定义 model
- 使用 model 进行数据增删改查操作
3.2、连接数据库
使用 npm 安装 mongoose 模块,并在使用模块中导入
# 安装 mongoose
npm i -S mongoose
# 导入模块
const mongoose = require( 'mongoose' )
# 连接数据库 返回 promise 对象
mongoose.connect('mongodb://localhost:27017/mydb', { useNewUrlParser: true, useUnifiedTopology: true })
connect 方法参 2 在新版本需添加,否则会有警告提示
useNewUrlParser:当前 URL 字符串分析器已弃用,将在将来的版本中删除。要使用新的解析器,请将选项 {usenewurlparser:true} 传递给 mongoclient.connect 。
useUnifiedTopology:当前服务器发现和监视引擎已弃用,将在将来的版本中删除。要使用新的服务器发现和监视引擎,请将选项 {useUnifiedTopology:true} 传递给 mongoclient 构造函数
3.3、定义 Schema
Schema 是 mongoose 中会用到的一种数据模式,可以理解为 数据表结构的定义;每个 schema 会映射到 mongodb 中的一个集合,它不具备操作数据库的能力。Schema 中定义数据校验,默认值,字段名,字段类型等特性。
// 创建用户集合规则
const UserSchema = new mongoose.Schema({
// 字段名/域名称
name: {
// 指字域类型
type: String,
// 必填字段
required: true,
// 字段最小长度 minlength 用于字符串类型
minlength: 2
},
age: {
type: Number,
// 默认值
default:10,
// 字段最小值 min用于数字类型
min: 1
},
pwd: String,
email: String,
// 定义此字段为 字符串数组类型
hobbies: [String]
})
3.4、定义 model
model 是由 schema 生成的模型,可以对数据库的操作
// 在 nodejs 中操作 mongodb 数据库
// mongoose 模块完成对于 mongodb 数据库的操作
const mongoose = require('mongoose')
// 1.连接数据库
mongoose.connect('mongodb://localhost:27017/jy2114',
{ useNewUrlParser: true, useUnifiedTopology: true })
// 2.定义 Schema 集合的结构
const userSchema = mongoose.Schema({
username: {
// 类型
type: String,
// 条件
required: true,
// 自定义验证
validate: {
validator: function (v) {
// return /^a/.test(v);
return true
},
message: '没有符合以a字符开头'
},
},
password: {
type: String,
required: true,
minLength: 2
},
age: {
type: Number,
// 默认值
default: 10
},
hobies: {
type: [String],
default: ['蓝球']
},
sex: {
type: String,
default: '男',
enum: ['男', '女']
}
})
// 3.定义操作的 model
// 参数1:模型名称 首字母大写
// 参数2:Schema
// 参数3:可选,如果有则为集合名称,如果没有写则使用参数1的复数形式为集合名称
const model = mongoose.model('User', userSchema)
// 添加 create 返回值为一个Promise
/* model.create({
username: 'ab',
password: 'bbb'
}).then(ret => console.log(ret))
*/
// 删除
// model.deleteMany({ username: 'admin' }).then(ret => console.log(ret))
// 更新
// model.updateMany({ username: 'admin' }, { $set: { password: '123' } }).then(ret => console.log(ret))
// 查询
// 查询单条和多条
// model.findOne({username:'admin'}).then(ret => console.log(ret))
// 根据_id来查询用户数据
// model.findById('6172653ba616d0d4c2e69383').then(ret => console.log(ret))
// 查询多条
// model.find().then(ret => console.log(ret))
// 查询总记录数
// model.find().countDocuments().then(ret => console.log(ret))
// 排序
// model.find().sort({username:-1}).then(ret => console.log(ret))
// 分页
// model.find().sort({ username: -1 }).skip(0).limit(2).then(ret => console.log(ret))
跳转链接 : NodeJs_01 _ 学习笔记
跳转链接 : NodeJs_02 _ 学习笔记
跳转链接 : NodeJs_03 _ 学习笔记