NodeJs_04 _ 学习笔记

目录

目标

1、模板引擎

1.1、介绍

1.2、art-template

1.3、安装与配置 art-template

1.4、语法

二、Mongodb

2.1、简介

2.2、安装软件

2.3、常用数据库指令

2.4、增删改查

2.4.1、添加

2.4.2、删除

2.4.3、查询 find

2.4.4、修改

三、Node 操作 Mongodb

3.1、Mongoose 介绍

3.2、连接数据库

3.3、定义 Schema

3.4、定义 model


跳转链接 :   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]}) 不要字段 显示 ,  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 5.0 中文文档

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 _ 学习笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值