express 基础以及mongo基础

express框架

产生的原因:
    1.http模块在处理路由这块比较鸡肋
    2.http模块在处理静态资源时比较麻烦
    3.http在获取浏览器的提交过来的参数时很麻烦
    4.express能解决url中有中文时,express能自动解码
        
基本概念:
express是nodejs发送网络请求的第三方框架,是NodeJS中一个优秀的 web 解决方案

地址:
https://www.npmjs.com/package/express
https://github.com/expressjs/express

安装:
    npm i/install express --save

express使用步骤

利用express开启web服务器的步骤:
1、在当前项目中使用 npm i/install express --save
2、导入express包
3、利用express对象创建一个application对象 app
4、在app对象上就有一系列方法(get,post)还可以可以分别设置请求路由
5、利用app.listen()监听端口

GET方法获取参数:
    直接从 req.query中就可以获取,非常简单
    
POST方法获取参数:
    使用一个第三方包 body-parser

express的路由

/man/xz
/man/ld

/woman/qz
/woman/sw

如何使用:
    1.将某一类路由规则放入到一个js文件中,写好相应的代码,并且暴露出去
        const express = require('express');
        
        let route = express.Router(); //创建一个路由
        路由的处理...
        
        module.exports = route; //将创建的路由对象暴露出去
    
    2.在启动服务器的js文件中,导入对应的路由,并且调用app.use方法使用即可
        const route = require('路由的路径');
        
        app.use('路由规则',route); //哪些路由规则适用于该路由
        

开发注意事项:
    设置路由一定要写在入口文件的代码后面一些,最好写在app.listen(xx) 的前一行即可;

express之next方法

使用方式:(有两种)

    第一种:连写方式,用得比较少
        app.get('/',(req,res,next)=>{
            res.write('1.0 ');
            next();
        },(req,res,next)=>{
            res.write('2.0 ');
            next();
        },(req,res)=>{
            res.end('3.0 end');
        });
        
    第二种:分开写,用得比较多
        app.get('/',(req,res,next)=>{

            res.write('1.0');
            
            //触发下一个同样的路由的回调函数
            next('route');
        });
        
        app.get('/',(req,res)=>{
        
            res.end('2.0');
        });

调用的过程分析:
    当浏览器请求 http://127.0.0.1:8888/
    触发第一个回调函数,当在第一个回调函数中手工执行next()的时候
    就会触发第二个回调函数,一直下去直到最后一个回调函数被执行,那么最后
    这个回调函数可以不用写next参数
    
使用注意:
    触发下一个同样的路由的回调函数,路由必须一致

express之通配符方法(all)与next方法联合起来做权限验证

使用方式:
    app.all('路由',(req,res,next)=>{

        if(登录过){
            next();  //继续往下执行真正的请求
        }else{
            res.end("请登录"); //提示用户登录
        }
    });

注意点:
    app.all(xxx); 一定要在所有路由的最前面

express静态资源处理

使用方式:
    app.use(express.static('静态资源路径')); 

访问时的注意点:
    如果浏览器要访问statics下面的site.css
    url应该是 http://127.0.0.1:8888/site.css 
    如果是http://127.0.0.1:8888/statics/site.css 反而报错
    如果是statics下面的字母中的静态资源,则一定要在url中加上子目录
    
注意点:
    设置在路由或是app.use(路由),之前
    要在两个地方写,一个是html里面,还有一个地方是入口的js文件

MongoDB

数据库概念

数据库:数据存储的仓库

数据库就是为我们方便的管理数据的一个平台,例如对数据的存储、修改、查询等都非常的方便。

数据库分类

数据库产品有很多,以下是一些常见的数据库产品:

  • MySQL
  • Oracle
  • DB2
  • SqlServer
  • MongoDB
  • etc.

数据库没有排名之分,各有各的应用场景,这里学习的是 MongoDB 数据库。

MongoDB 数据库

为了更好的学习 MongoDB 数据库,大家可以参考菜鸟教程上的 MongoDB 数据库教程文档,
链接地址:http://www.runoob.com/mongodb/mongodb-tutorial.html

mongodb数据库官网:https://www.mongodb.com/

下载地址:https://www.mongodb.com/download-center?jmp=nav
选择好对应的版本下载即可

为什么选择MongoDB?

理由:

    1.只要会js/json就会mongodb(学习成本低)
    2.mongodb对js的兼容性最好
    3.mongodb存数据就是存JSON

安装与配置 MongoDB 数据库环境

详情见视频:

怎么验证安装成功:
    在cmd终端中输入: mongo --version 或是 mongod --version ,能看到版本好,说明安装成功
    
如果终端中输入 mongo --version 提示找不到命令,一定要看看是不是没有配置mongodb的环境变量,并且配置环境变量之后一定要记得重启cmd

window7安装MongoDB存在的问题

建议:升级到window10

解决步骤:
    1.将你的操作系统升级到window7最新版
    2.安装 vc_redist.x64.exe 
    3.如果你的电脑是32位的,再安装32位的mongodb软件 mongodb-win32-i386-3.2.11-signed.msi

MongoDB 数据库存储结构

[图片上传失败...(image-d75d13-1513870122297)]

和Excel对比一下即可明白:

Excel                       MongoDB

创建工作簿 创建数据库
创建一个sheet(工作表单) 创建集合
确立表头,插入数据 插入文档(确立表头)

核心思想:
    1.分门别类的存储数据
    2.mongodb是以`集合`的概念来区分不同数据的,比如用户集合,商品集合,订单集合等等,不同的数据要放在不同的集合中去统一管理
    3.集合里面存储的可以认为是一个数组
    4.数组中的每一个对象,可以认为就是JSON对象,在mongodb中我们称之为 `文档`
    5.文档的结构可以随意,但是必须统一,也就是说,同一个集合中,所有的文档一定要遵守相同的数据结构
    
其他:
    `集合`的作用就是用来隔离数据,分门别类的存储数据

操作MongoDB的步骤

1.创建数据库中数据的存储目录
2.启动MongoDB的服务实例
3.创建数据库
4.创建集合
5.创建文档

MongoDB使用之前必做步骤1--创建数据目录(必须)

我们在安装完成MongoDB后需要创建一个存放数据的目录。请注意,数据目录应该放在根目录下((如: C:\ 或者 D:\ 等 ),数据目录的命名随意,比如我就命名 mongodb_datas

MongoDB使用之前必做步骤2--启动服务器(必须)

启动MongoDB服务器的方式一:通过终端指令去启动

    1.首先在终端切换到你的MongoDB的安装目录的bin目录下(当然如果配置了环境变量在哪个目录下都可以了)

    2.在终端执行: mongod.exe --dbpath c:/mongodb_datas ,如果成功启动就表示一切都OK了
        
    注意点:
        1.32 位版本使用下面的命令启动数据服务:
        ```
        mongod --dbpath 数据存储路径 --journal --storageEngine=mmapv1
        ```
        
        2.执行完上面的命令并成功开启 MongoDB 数据服务实例之后,就把该控制台最小化到一边就可以了,
        千万不要关闭,否则无法连接,如果对数据库的操作结束,可以打开该控制台通过 `Ctrl + C` 关闭。

启动MongoDB服务器的方式二:方式一的延续,把上面的指令做成一个批处理文件.bat


启动MongoDB服务器的方式三:将MongoDB服务器作为Windows服务运行

    请注意,你必须有管理权限才能运行下面的命令。执行以下命令将MongoDB服务器作为Windows服务运行:
    
    例子:
        mongod.exe --bind_ip 127.0.0.1 --logpath "C:/mongodb_datas/server_log/mongodb.log" --logappend --dbpath "c:/mongodb_datas" --port 27017 --serviceName "MongoDBServer" --serviceDisplayName "MongoDBServerDisplayName" --install
        
    
    补充:从Windows服务中卸载 MongoDB服务
        1.先停止要删除的服务(比如MongoDBServer)
        2.以管理员身份运行cmd,在cmd中输入: sc delete 服务名称(比如MongoDBServer)
        
    注意点:
        1.mongodb.log 这个日志文件一定要先创建好,才能执行指令
        2.必须要以管理员的身份打开cmd窗口,并运行

如何连接到MongoDB服务器并且操作它?

注意:在进行连接之前请确保你的服务实例是开启状态的(不要关闭刚才开启的数据服务实例)。

可以使用两种方式来连接到MongoDB服务器并且操作它

连接方式1:使用MongoDB自带的MongoDB后台管理 Shell
    在终端中输入 mongo 或是 mongo --host 127.0.0.1 --port 27017
    
    mongo 命令默认去连接本机上的 MongoDB 服务实例:`127.0.0.1:27017`,可以通过下面的命令
    指定连接的主机名和端口号:
    ```
    mongo --host 127.0.0.1 --port 27017
    ```
    
    如果看到类似于如下的字样说明连接成功:
    ```
    MongoDB shell version v3.4.2
    connecting to: mongodb://127.0.0.1:27017
    MongoDB server version: 3.4.2
    Server has startup warnings:
    2017-01-18T18:49:53.865+0800 I CONTROL  [initandlisten]
    2017-01-18T18:49:53.865+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
    2017-01-18T18:49:53.866+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
    2017-01-18T18:49:53.866+0800 I CONTROL  [initandlisten]
    >
    ```
    如果提示 “无法连接主机”,请检查你的 MongoDB 数据服务实例是否开启。
    
操作方式1:在终端中使用mongodb的指令进行操作

        常见指令:
            见下一个知识点


连接及操作方式2:使用图形化客户端工具:
    robomongo(跨平台) : https://robomongo.org/download

基本操作命令

可以参考:
    http://www.yiibai.com/mongodb/mongodb_create_collection.html
    
    http://www.runoob.com/mongodb/mongodb-tutorial.html
  • show dbs

    • 查看当前服务实例上所有的数据库
  • use 数据库名称

    • 如果数据库不存在,则创建数据库,否则切换到指定数据库。
  • db.dropDatabase()

    • 删除数据库,注意,要在切换的数据库中删除
  • db

    • 查看当前所处的数据库
  • show collections

    • 查看当前数据库中所有的集合
  • db.createCollection("集合名称")

    • 创建集合
  • db.集合名称.drop()

    • 删除集合
  • db.集合名称.insert({数据文档})

    • 插入的每一条文档会自动帮我们生成一个_id字段,它是mongodb自动维护的,不需要我们关心
  • db.集合名称.find()

    • 查询指定集合中所有的数据
    • 可以通过 db.集合名称.find().pretty() 美化输出格式
    • 默认是查询所有,可以通过:db.集合名称.find({查询条件}) 按条件查询集合中的数据
    • 模糊查询的条件 {要查询的字段:{$regex: '关键字'}}
  • db.集合名称.update({更新条件}, {要更新的字段})

    • 更新指定集合数据,注意点,要更新的字段一定要这样写 {$set:{字段的名称:字段的值}},
  • db.集合名称.update({更新条件}, {要更新的字段},{multi:true})

    • 更新多条文档,{multi:true}默认是false
  • db.集合名称.remove({删除条件})

    • 删除指定集合中的数据
  • db.集合名称.remove({删除条件},{multi:true})

    • 删除多条文档,{multi:true}默认是false
  • exit 退出当前操作

  • cls 清屏

    注意点:更新和删除时一般都需要带条件,除非是全部更新与全部删除,不过全部更新与全部删除这样很危险,实际操作过程中很少

使用 Node 操作 MongoDB

安装 MongoDB 官方提供的驱动包:

npm install --save mongodb

具体操作方式请参考官方文档:https://www.npmjs.com/package/mongodb

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容