zoukankan      html  css  js  c++  java
  • node=day5

    (1)反馈

      1、sublime没有格式化功能,如果需要则需安装插件实现HTML-CSS-JS Prettify,安装完毕后快捷键为Ctrl+Shift+H

        

      2、回调函数,详见js中的异步模式--- 回调函数篇

      3、封装ajax方法,详见封装ajax方法

      4、关于JS模块化问题,详见关于JS模块化问题

      5、package-lock锁文件作用,详解package-lock锁文件作用 

      6、find和findIndex原理,详见find和findIndex原理 .

      7、Express判断页面不存在,404情况

            

    (2)MongoDB简介+安装

      1、关系型数据库和非关系型数据库

        

         

      2、语言支持

         

         数据库和语言没有关系,可以互相结合去用

      3、安装

    具体下载和安装步骤,也可以结合下文MongoDB下载安装步骤+文件解析 .

      下载链接:MongoDB 预编译二进制包下载地址:https://www.mongodb.com/download-center/community

    注意:在 MongoDB 2.2 版本后已经不再支持 Windows XP 系统。最新版本也已经没有了 32 位系统的安装文件。即官方宣布,不再优化支持32位

      32位下载地址:https://www.mongodb.org/dl/win32/i386,下面开始进行安装

         

         

    默认安装到C盘,一般直接采用默认路径即可,除非C盘快满了
    安装到C盘后,启动和访问该程序的速度变快,但C盘是系统盘,安装的东西越少越来,C盘安装的东西多,电脑就会很卡。
    这里因为我的C盘快满了,所以我放到D盘根目录下的MongoDB文件夹(注意:这里我是在D盘下手动创建的MongoDB文件夹)

        

         

         

         

        

      4、配置环境变量

         安装完毕后,在CMD命令行输入指令检测安装状态

        

    此时提示mongod不是内部或外部命令,也不是可以运行的程序或批量处理文件。所以接下来要开始配置环境变量

        将mongob.exe所在目录加到环境变量→用户变量→Path里

        

         

         

    配置完成后,重启CMD,重新检测

        

    至此MongoDB的安装和配置便已经完成

    (3)验证

    mongod --version

      

      配置完环境变量后如下

      

       

    (4)上午小结

      

      数组遍历及其他方法:详见下文数组遍历及其他方法.

       

       

    (5)开启和关闭数据库

       1、检验MongoDB

        

      2、开启服务有两种方式

        ①按照菜鸟教程所写步骤,安装MongoDB服务,此后便可以右击启动

        ②另一种启动方式,CMD输入mongod

    注意:默认数据存储目录为/data/db,如果启动不成功查看该盘根目录是否有该文件。第一次启动需要手动创建,
    例如当前在c盘启动服务,启动失败

        

         接下来在c盘下新建data/db目录

        

         接下来再次启动

        

    此时便启动成功,如果想切换db路径,可以在启动时输入该指令
    mongod --dbpath 自定义的db路径(例如,我在D:MongoDB程序的文件夹下创建了datadb,那这里便可以在C盘【另一个盘】去启动D盘下自定义的数据库服务)

        

      3、关闭服务

        关闭服务十分简单,与关闭node服务类似,Ctrl+C或者点击右上角关闭CMD

    (6)MongoDB基本感知

      1、连接数据库

    注意:在连接数据库之前,必须保证数据库是开启状态,即已经开启服务

        

    接下来需要再打开一个CMD操作,输入mongo连接本机数据库
    再次强调:数据库服务此时必须是开启状态,即另一个CMD下必须是开启数据库服务态

        输入mongo后如果本地启动了数据库服务便会进行连接

        

      2、数据库图像操作软件

    之前的php,经常配合使用MySQL关系型数据库,常用的数据库操作软件是猫传Navicat

        

         

    注意:正如上图所示,该数据库管理和设计工具只能操作关系型数据库,因为MongoDB属于非关系数据库,所以无法使用

      3、断开

        

      4、小结

        

      5、基本命令

    ①查看显示所有数据库show dbs

        

        当前显示出的为系统数据库

    ②db查看当前操作的数据库
    ③use 数据库名称
        切换到指定的数据库,如果没有则会新建

      如下所示:

      

       db会输出test,默认在test数据库,但查看数据库show dbs时没有打印出test,为什么呢?

    只有当数据库存储数据时,在show dbs时才会出现。所以use 数据库名称,如果该数据库不存在则会创建,但show dbs时不可见,除非往里存储数据。

      例如,接下来创建个数据库叫studentsInfo,并使用db查看当前数据库

      

        但是使用show dbs查看所有数据库时不显示,因为当前的studentsInfo数据库没有存储数据

       

       接下来插入数据

      

    此时已经存储数据,那么show dbs查看所有数据库时则可见

      

       然后查看当前数据库的所有集合

      

    ④查看数据库所有存储数据集合show collections

      接下来查询集合所有数据

      

    ⑤查询集合所有数据db.集合名.find()

      此外,还可以接着往里插入数据,这里注意

    ①MySQL需要设置数据表,且格式必须一致
    ②这里的id也具有唯一性
    ③插入数据时不必和之前数据格式一致,比较随意自由。即这里集合是任意的,十分灵活;可以理解为JS对象,格式灵活。而MySQL不能这么随意插入,除非更改表结构

      

    日常开发里都是结合node去操作数据库,而不是直接来CMD里进行复杂操作,这里简单体会一下即可。
    接下来介绍下通过node.js连接操作数据库

    (7)初始mongoose

    接下来看下在node中如何操作MongoDB数据库,首先看下第一种方式:使用官方MongoDB包

      1、npm网站搜索MongoDB包

         

    这是MongoDB数据库官方提供的JS包,用于连接操作数据库;相关源码则存储在GitHub上

        

    里面有相关安装和使用步骤及案例

        ①安装

          

         ②快速开始

    初始化项目,安装MongoDB包

          

           

           

        ③启动MongoDB服务,指定数据存储目录

          

         ④连接数据库

          

         ⑤插入文档

          

         ⑥更新文档

          

         ⑦删除文档

          

         ⑧查询文档

          

    至此便是数据库的增删改查。
    注意:官方提供的原生代码比较繁琐,在真实开发里使用较少

      2、第二种方式:使用第三方mongoose来操作MongoDB数据库

    mongoose本质上是基于官方node-mongodb-native再次做了封装

      

       接下来写个案例,体会一下

      ①新建项目mongoose-demo,初始化项目(创建package.json)

      ②安装第三方包→mongoose依赖包(npm新版5.xxx之后,默认下载时自带--save,所以下载生产依赖时可以不带参数)

        

         ③在项目根目录下新建demo.js温江,将mongoose官方文档案例代码粘到文档里

        

         

         完整代码如下

            

      ④测试

    分析代码可知,案例默认连接test数据库;
    接下来运行测试下,注意:保证数据是启动的

        启动数据库

        连接服务

    接下来支持mongoose案例脚本代码

        

    此时再次查看所有数据库

        

    接下来可以查看该数据表数据

        

      ⑤此外也可以结合循环保存多个

        

         

         

    以上便是mongoose结合node的初步体会,可以发现和js开发十分相似

         

    (8)MongoDB数据库基本概念

      1、数据表与集合

    数据库里的构成与MySQL不同
    MySQL是数据表构成,使用前需要设计表结构,较为严谨 MongoDB是集合构成,格式较为灵活

      2、集合里面是文档

      3、整体关系

        

    可以这样理解
    1、整个MongoDB数据库是个大对象
    2、里面有多个数据库qq、taobao、百度
      接下来将不同网站数据存储到不同数据库

      4、数据库→集合,每个数据库由集合构成,类似于MySQL数据表,可以简单理解为数据(数据集合)

        

      5、集合里的基本单位是“对象”,即数据集合是由多个对象构成

    一个对象可以称之为一个文档

         

         整体数据库存储结构如下

        

      6、MongoDB数据库存储结构

    1、MongoDB中可以有多个数据库,存储不同逻辑数据的存储目录,较为灵活
    2、一个数据库里可以有多个集合(简单理解为数据)
    3、一个集合可以有多个文档,集合的基本单位为对象,文档格式随意,甚至可以为空

        

    (9)mongoose开始

    接下来结合官方指南,简单测试下案例功能

       1、新建文件,重新编写mongoose案例

        

         接下来结合中文文档,依次手写步骤

        

      2、引包+链接数据库

        

      3、设计集合结构(可以理解为数据表结构)

    虽然MongoDB从底层来讲,比较灵活,不需要设计表结构;
    但是数据结构不能乱存,不方便查询管理,如下所示

        

    MongoDB文档结构(对象结构)比较随意,但不建议这样乱存,所以要通过代码来设计表结构

        约束的目的是保证数据的严格完整,避免脏数据

    /*1、引包*/
    var mongoose = require('mongoose')
    var Schema = mongoose.Schema/*Schema译为架构、结构*/
    /*  
        2、连接数据库
        案例连接本地test数据库
        注意:如果数据库不存在则会被创建,直到插入数据后便看见了
    */
    mongoose.connect('mongodb://localhost/demo')
    /*
        3、设计集合结构(通俗理解为设计表结构)
            字段名称就是表结构中的属性名
            值为属性值的类型
    */
    /*
        blogSchema博客文档架构
        title标题、 author作者、body文章内容、comments评论、date日期
    */
    var blogSchema = new Schema({
        title:String,
        author:String,
        body:String,
        comments:[{body:String,date:Date}],
        date:{type:Date,default:Date.now},
        hidden:Boolean,
        meta:{
            votes:Number,
            favs:Number
        }
    })

        上面博客数据表设计较为繁琐,所以接下来设计个简单的用户数据表结构

        

         但这样设计不够严谨,没有办法实行约束,例如“必须具有用户名”,所以类似于Vue中的Props限定,我们可以在userName后加上其他约束

        

      4、将设计的文档架构发布为模型

        

        参数分析

    参数1:大写名词单数字符串表示数据库名词,mongoose约定:“会自动将大写名词的字符串转成小写复数的集合名词”
    参数2:架构Schema
    
    返回值:数据表设计模型的“构造函数

        

      5、拿到User返回值→设计模型的构造函数,开始进行相关操作(增删改查)

    (10)mongoose之新增数据

      

       

       接下来看下,如何通过User即设计架构发布为模型后返回的构造函数进行增加操作,按照之前设计的格式进行添加

      

    添加完后,还需要进行持久化存储

      

       目前为止,还需要进一步完善,即持久化存储之后,监听存储成功or失败

      

      接下来看下最终存储的回调函数参数result返回结果

      

    接下来开始进行测试,注意:需要保证数据库正常开启

      

    注意:
        这里_id为自动生成,确保数据唯一性

      小结:

    基于设计的集合架构Schema(即数据表结构),进行模型发布,返回构造函数;然后对构造函数进行实例化插入,插入完毕后还需要进行持久化存储,且持久化存储需要回调函数监听存储状态

      运行多次后接下来可以去数据库查看数据

      

    (11)mongoose之查询

      1、查询所有,得到结果为数组[]

         

         

      2、接下来测试下按条件查询

        ①再次插入其他数据

          

           持久化存储保存,然后将存储代码注释掉,接下来只验证查询功能

          接下来查询时便只会存在两个对象,如果存储了多个相同,此时可以先切换数据库,重新添加。查询结果如下

          

      3、按条件查询

    在find的回调函数参数前加入条件对象即可

        

         

    注意:当没有所查询数据时,便返回空数组,如下所示:查询“张三678”

        

         

    find方法:返回匹配到的元素,放入数组,返回值为匹配元素数组。
    如果只想返回一个,可以使用findOne,如下所示

      4、findOne

    此时得到的便是一个对象,按照条件查询单个;

        

         

    注意:如果findOne没有写条件,则会返回数据集合中的首个文档数据,如下所示

        

         

         这里因为第一个是张三,所以返回张三。

    注意:如果此时没有符合条件的,则返回null

        

      5、小结

        

         

    (12)mongoose之删除数据

      

       

    n代表number删除了一个
    ok代表成功删除1个

      接下来可以利用find查询所有或者直接从CMD切换数据库到该数据库查看,如果不带条件则会都删除,此时查询为空

      

       如下,利用find查询

      

       小结:

      

       

       

    (13)mongoose之更新数据

    为了方便测试,这里我们一nodemon启动服务,以后再次修改密码,便不用手动重启。
    例如:这里我们将userName为admin的密码password改为666666

      1、根据id更新

        首先找到id,然后结合findByIdAndUpdate进行查询更新

    注意:三个参数id、改变数据、回调函数

        

         

        结果如下:

        

         此外,可以去CMD通过指令查看数据库更新数据

        

    接下来结合mongoose将之前的CRUD案例改为数据库操作,之前为文件操作

        

    (14)将CRUD案例改为MongoDB数据库操作版本

      首先将之前的CRUD案例代码粘贴过来

      

      1、将原来自己封装的student.js改为students-fs.js,然后再新建一个文件,名为student.js

        

         先把基础格式写出来

        

         然后结合之前所写,设计集合结构(数据表结构)

        

    其中id会在数据库自动生成,所以只需要设计另外几个文档格式即可

        完整代码如下

          

      2、接下来修改之前的路由配置文件,因为与之前自定义调用API有所不同,所以这里需要对调用处依次修改

        首先看下第一个,查询渲染所有数据

        

    分析后可知find方法也mongoose的查询方法类似,所以这里不用修改
        接下来根据报错信息,
        1、安装mongoose模块
        2、开启数据库服务,指令mongod
        3、连接数据库,指令mongo
        关于MongoDB的安装,mongod和mongo的区别,详见MongoDB的安装,mongod和mongo的区别.

        ①启动数据库服务

           

         ②CMD连接数据库,方便后期测试

          

         ③再次启动服务器,查看页面渲染部分功能

          

           

           因为此时数据库为空,所以底下没有展示数据列表,接下里可以手动切换到0204数据库,往里插入数据

          

           此时数据库已经存在一条数据,再次刷新页面,如下所示,便可以看到刚才添加的数据了

          

    此时id为数据库自动添加,我们把它换成下标

          

           

      3、接下里处理添加学生

        原来代码如下所示

        

         接下来结合mongoose添加数据语法进行改写

        

    mongoose添加数据语法为new 模型,然后save持久化存储

          

           接下来测试下添加学生功能,此时便可以成功添加了

          

           此外,也可以通过CMD查看数据库存储文档

          

      4、接下来改写更新数据功能

           

    这里我们使用findByIdAndUpdate的API进行更新,根据id只更新一个
    此外,也可以结合结合mongobooster可视化工具进行辅助操作,详情参见文章MongoDB可视化工具之mongoBooster.
    先看5编辑功能改写

      5、编辑功能---渲染编辑更新页面

        这里注意,数据库存储形式为_id,所以需要在页面修改下

        

         此时点击编辑时,发现右下角有引号

         

         所以接下来去除引号

        

    注意:replace语法默认将第一个匹配的替换掉,无法替换多个。所以这里需要结合正则-g进行全局匹配

        此时便可以预览编辑页面

         

           

       6、完成编辑功能---页面新数据保存提交

        

         

    至此便可以正常保存新数据

      7、删除功能

        

    这里我们利用id删除,即API为findByIdAndRemove

        

    (15)使用Node操作MySQL数据库

      关于MySQL安装细节,详见下文MySQL数据库安装步骤.

    (16)总结

      

       

       

    (17)回调地域

      详见文章浅谈JS回调地狱.

    (18)Promise相关

       详见下几篇文章

    (19)Promise应用场景

       详见文章Promise应用场景.

    (20)封装Promise版本的ajax方法

       详见文章封装Promise版本的ajax方法.

    (21)promise数据库操作

       详见文章promise数据库操作案例.

    .

  • 相关阅读:
    hdu 4027 Can you answer these queries?
    hdu 4041 Eliminate Witches!
    hdu 4036 Rolling Hongshu
    pku 2828 Buy Tickets
    hdu 4016 Magic Bitwise And Operation
    pku2886 Who Gets the Most Candies?(线段树+反素数打表)
    hdu 4039 The Social Network
    hdu 4023 Game
    苹果官方指南:Cocoa框架(2)(非原创)
    cocos2d 中 CCNode and CCAction
  • 原文地址:https://www.cnblogs.com/jianxian/p/12244743.html
Copyright © 2011-2022 走看看