Express 框架、模板,MongoDB数据库

  
  今天跟你们分享的是Express框架、模板、MongoDB数据库;我的以为颇有用,但愿能在你们作项目的的过程当中能有所帮助。
 
Express 模板
 
这是一个用户量较大的一个Node框架,提供了一整套的Node模板,在里面可使用EJS模板引擎..

基于 Node.js 平台,快速、开放、极简的 web 开发框架。(开发后端)

Express的性能对Node没有影响,依然很高。
 
安装方法:
 
1. 全局安装express 和 express应用生成器
npm install express -g
npm install express-generator -g

  

2. 使用应用生成器去建立应用
-e 表明使用ejs模板引擎,不然会使用jade模板引擎
 cmd:   express project(项目名字) -e(使用ejs模板引擎)

  

3. 安装依赖,进入到建立好的项目中安装依赖
cd project
npm install

  

应用分析:
1. package.json

    body-parse:专门负责解析前端传递来的数据

    cookie-parser:解析请求头中的cookie信息

    ejs:模板引擎编译工具

    serve-favicon:专门处理相似于谷歌浏览主动请求favicon.ico文件的问题

2. bin/www 这个是和建立的服务相关的东西,能够在这里配置端口等等设置。

3. public:静态资源文件夹,在这个文件夹里的文件,在前端均可以直接访问,不须要再在后端配置路由, /stylesheets/a.css

4. app.js:主应用文件,在这里能够设置路由、插件等等之类的东西,其实建立出来的就是requestListener

5. views:放入ejs模板,express会将ejs模板装换成html文件

6. routes:里面的全是路由文件,专门来处理不一样的请求

  

模板引擎:
 
在前端开发过程当中,有不少模板引擎可使用,例如jade,ejs等等
 
使用模板引擎的优势:

1. 能够在模板引擎文件里去写一些逻辑性的代码,用于服务端渲染,提升seo优化级别

2. 可使用便捷语法来开发html结构代码(jade)。

什么是ejs:

ejs是一个简单高效的模板语言,经过数据和模板,能够生成html标记文本,能够说ejs是一个js库,ejs能够运行在客户端和服务器端,客户端安装直接用引入文件便可,服务端要用npm包安装

* ejs的特色:

* 快速编译和渲染

* 简单的模板标签

* 自定义标记分隔符

* 支持文本包含

* 支持浏览器端和服务器端

* 模板静态缓存

* 支持express视图系统
 
 
服务端渲染:
 
其实前端开发须要作的事情,只有两个:1. 建立界面结构 2. 数据交互 3. 渲染数据

数据交互其实又能够分红两种:1. 给后端数据 2. 从后端拿数据

数据交互的目的是什么?取:将数据渲染到dom文档中 给:提交数据到后台后,后台会继续返回咱们一个数据,拿到这个数据,依然仍是须要渲染

数据渲染方式分为两种:
 
1. 客户端渲染(浏览器渲染):前端js经过ajax等数据交互技术,获取到数据后经过操做dom来进行数据的渲染

例如,ajax获取到用户购物车的信息,经过拼接字符串的方法将数据渲染在dom中

2. 服务端渲染,浏览器请求到的内容其实能够经过后端加工一下,将一会数据直接渲染好,再给浏览器就能够了

例如,每一个学期开始的时候,学生会获得课本,。课本上的空题都须要学生本身去写,当学期末写完的时候,至关于客户端将数据渲染在浏览器中,学生将答案写在了课本上

经过,老师均可以获得教材课本,在这种课本上,答案,讲义等等都已经印刷好了,至关于服务端将数据渲染在浏览器,书商将答案印在了课本上

客户端渲染的优势:比较灵活;通过用户的动做进行加载的数据

服务端渲染的优势:减小了前端逻辑,提升了SEO优化等级,只要是在页面加载的时候就须要渲染的数据,变更较少的数据


在php中实现服务端渲染:
 
在php文件中能够放入html代码,访问php文件的时候就至关于访问这个对应的html文件,由于在php文件中,因此能够写一些php的代码来渲染数据

在Node中实现服务端渲染:

利用模板引擎,node在渲染模板的时候给模板传入数据,在模板中就可使用特定的语法来渲染dom了
 
注意:express里的路由是靠请求路径划分的,前一个本身搭的路由是根据请求类型划分的。
 
MongoDB 数据库
 
这是一个数据库,与MySQL(关系型数据库)的区别就是,它是一个非关系型数据库 NoSql数据库
 
关系型数据库和非关系型数据库的区别:
 
1.实质。

非关系型数据库的实质:非关系型数据库产品是传统关系型数据库的功能阉割版本,经过减小用不到或不多用的功能,来大幅度提升产品性能。

2.价格。

目前基本上大部分主流的非关系型数据库都是免费的。而比较有名气的关系型数据库,好比Oracle、DB二、MSSQL是收费的。虽然Mysql免费,但它须要作不少工做才能正式用于生产。

3.功能。

实际开发中,有不少业务需求,其实并不须要完整的关系型数据库功能,非关系型数据库的功能就足够使用了。这种状况下,使用性能更高、成本更低的非关系型数据库固然是更明智的选择。
 
mongodb的特色:
 
1. 性能高、I/O处理快
2. 速度快
3. 稳定很差,占用空间大
 
1.安装MongoDB
 
  下载对应版本的mongodb来进行安装,安装的后注意须要手动设置数据库的位置。。。详细请搜索

  1.在安装的时候选择安装地址,通常状况下安装在c盘(默认安装地址)便可

  2.咱们在c盘(最好)创建一个data文件夹,在data文件夹下面再创建一个db文件夹

  3.在mongodb的bin文件夹下,cmd执行 mongod.exe --dbpath c:\data\db

  4.运行mongod.exe来启动mongodb

  5.依然在mongodb的bin文件夹下cmd 输入mongo回车,就能够操做mongodb,例如 show databases;
 
小贴士:若是安装不上,由于有一些个dll文件缺乏,要么去按照百度教的方法下载驱动精灵修复系统,要么重装系统,要么就用本身的电脑
 
2.MongoDB概念
 
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

它的特色:高性能、易部署、易使用,存储数据很是方便。
 
3.专业术语
 
SQL术语、概念 | MongoDB术语、概念 | 说明
-----------------|---------------------|--------------------------
database     |      database     |  数据库
table       | collection          | 表\集合
row              | doucument       | 数据记录行\文档
column        | field                  | 数据字段\域
index           | index                | 索引
table joins   |                          | 表链接 mongodb不支持
primary key | primary key      | 主键,mongodb自动将_id做为主键
 
4.mongodb的存储数据相似于js的json格式对象,或者json文件存储数据的方式:
 
[
    {
        "_id":ObjectId("1726iuhas678971726731"),
        "age":25,
        "city":"beijing",
        "email":"asdgakj@qq.com"
    },
    {
        "_id":ObjectId("1726iuhas678971726731"),
        "age":25,
        "city":"beijing",
        "email":"asdgakj@qq.com"
    }
]

  

5.数据库
 
一个mongodb中能够创建多个数据库。

MongoDB的默认数据库为"db",该数据库存储在data目录中。

MongoDB的单个实例能够容纳多个独立的数据库,每个都有本身的集合和权限,不一样的数据库也放置在不一样的文件中。
 
6.简单操做
 
show databases 查看数据库

db 查看当前数据库

use name 切换某个数据库
 
7.文档
 
文档是一个键值(key-value)对(即BSON)。

MongoDB 的文档不须要设置相同的字段,而且相同的字段不须要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 很是突出的特色。
一个简单的文档例子以下:
[
    {"genres": ["犯罪","剧情" ],"title": "肖申克的救赎"},
    {"title":"阿甘正传",grade:"8.4","genres":"励志"}
]

  

8.集合
 
集合就是 MongoDB 文档组,相似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合能够插入不一样格式和类型的数据,但一般状况下咱们插入集合的数据都会有必定的关联性。
 
{
    'title':['aaa',"aaa","aaa",["a":{}]]
},
{
    'title':'bbb'
}

  

9.数据类型
 
String : 这是最经常使用的数据类型来存储数据。在MongoDB中的字符串必须是有效的UTF-8。

Integer : 这种类型是用来存储一个数值。整数能够是32位或64位,这取决于您的服务器。

Boolean : 此类型用于存储一个布尔值 (true/ false) 。

Double : 这种类型是用来存储浮点值。

Min/ Max keys : 这种类型被用来对BSON元素的最低和最高值比较。

Arrays : 使用此类型的数组或列表或多个值存储到一个键。

Timestamp : 时间戳。这能够方便记录时的文件已被修改或添加。

Object : 此数据类型用于嵌入式的文件。

Null : 这种类型是用来存储一个Null值。

Symbol : 此数据类型用于字符串相同,但它一般是保留给特定符号类型的语言使用。

Date : 此数据类型用于存储当前日期或时间的UNIX时间格式。能够指定本身的日期和时间,日期和年,月,日到建立对象。

Object ID : 此数据类型用于存储文档的ID。

Binary data : 此数据类型用于存储二进制数据。

Code : 此数据类型用于存储到文档中的JavaScript代码。

Regular expression : 此数据类型用于存储正则表达式

  

10.库的操做
 
* Help查看命令提示

help

db.help()

db.test.help()

db.test.find().help()

* 建立/切换数据库

use music

* 查询数据库

show dbs 空库将不会显示

db.albums.insertOne({'title':'bey bey'})来插入一条后再看

* 查看当前使用的数据库

db/db.getName()

* 显示当前DB状态

db.stats()

* 查看当前DB版本

db.version()

* 查看当前DB的连接机器地址

db.getMongo()

* 删除数据库

db.dropDatabase()

  

Collection汇集集合操做
 
建立一个汇集集合

db.createCollection("collName", {size(集合大小): 20, capped(固定大小,可提升使用效率): true, max(最大值): 100});

db.collName.isCapped(); //判断集合是否为定容量

获得指定名称的汇集集合

db.getCollection("account");

获得当前db的全部汇集集合

db.getCollectionNames();

显示当前db全部汇集的状态

db.printCollectionStats();

  

添加、修改与删除集合数据
 
查看
 
db.users.find()

  

添加
 
db.users.save({name: ‘zhangsan', age: 25, sex: true});

db.users.insertOne({name: ‘zhangsan', age: 25, sex: true});

db.users.insertMany([{name: ‘zhangsan', age: 25, sex: true},{name: ‘zhangsan', age: 25, sex: true}]);

  

修改
 
db.users.update({age: 25}(约定条件,所有修改只写{}), {$set: {name: 'changeName',sex:1}}, false, true);

第三个参数为,若是没有这个数据,会不会建立,第四个参数为,若是有不少,是要全改true,仍是只改第一条

至关于:update users set name = ‘changeName' where age = 25;

db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);

至关于:update users set age = age + 50 where name = ‘Lisi';

db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);

至关于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';

  

删除
 
db.users.remove({age: 32});符合条件全删
db.users.remove({age: 132},{justone:true});只删一条
db.users.remove({});删除全部document

 

查询修改删除
 
db.users.findAndModify({
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});

db.runCommand({ findandmodify : "users", 
    query: {age: {$gte: 25}}, 
    sort: {age: -1}, 
    update: {$set: {name: 'a2'}, $inc: {age: 2}},
    remove: true
});

 

query 过滤条件 $gte大于

sort若是多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操做,-1位为降序

remove 若为true,被选中对象将在返回前被删除

update 一个 修改器对象

remove 建立新对象若查询结果为空

 

在mongodb中根据_id主键来查找数据
 
mongodb在存储数据的时候会自动的为每个document生成一个_id主键,咱们在nodeJS中根据_id查找的时候要注意一点,不能直接:

let _id = '5a0bc041bf680d5ee434683d'
coll.find({_id:_id})

须要从mongodb模块中引入ObjectID方法,这个方法能够将上面的字符串转成mongodb数据库能够识别的_id数据类型

var ObjectID = require("mongodb").ObjectID
let _id = '5a0bc041bf680d5ee434683d'
coll.find({_id:ObjectID(_id)})

 

 
汇集集合查询
 
查询全部记录
 
db.userInfo.find();

至关于:select* from userInfo;

查询去重后数据

db.userInfo.distinct("name");

至关于:select distict name from userInfo;

查询age = 22的记录

db.userInfo.find({"age": 22});

至关于: select * from userInfo where age = 22;

查询age > 22的记录

db.userInfo.find({age: {$gt: 22}});

至关于:select * from userInfo where age >22;

查询age < 22的记录

db.userInfo.find({age: {$lt: 22}});

至关于:select * from userInfo where age <22;


查询age >= 25的记录

db.userInfo.find({age: {$gte: 25}});

至关于:select * from userInfo where age >= 25;

查询age <= 25的记录

db.userInfo.find({age: {$lte: 25}});

查询age >= 23 而且 age <= 26

db.userInfo.find({age: {$gte: 23, $lte: 26}}); 查询name中包含 mongo的数据 db.userInfo.find({name: /^mongo/}); //至关于%% select * from userInfo where name like ‘%mongo%’; 查询name中以mongo开头的 db.userInfo.find({name: /^mongo/}); 至关于select * from userInfo where name like ‘mongo%’;


查询指定列name、age数据 db.userInfo.find({}, {name: 1, age: 1}); 至关于:select name, age from userInfo; 查询指定列name、age数据, age > 25

db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});

至关于:select name, age from userInfo where age >25;

按照年龄排序

升序:db.userInfo.find().sort({age: 1});

降序:db.userInfo.find().sort({age: -1});

查询name = zhangsan, age = 22的数据

db.userInfo.find({name: 'zhangsan', age: 22});

至关于:select * from userInfo where name = ‘zhangsan' and age = 
’22';

查询前5条数据

db.userInfo.find().limit(5);

至关于:select top 5 * from userInfo;



查询10条之后的数据

db.userInfo.find().skip(10);

至关于:select * from userInfo where id not in (
   select top 10 * from userInfo
);

查询在5-10之间的数据

db.userInfo.find().limit(10).skip(5);

or与 查询

db.userInfo.find({$or: [{age: 22}, {age: 25}]});

至关于:select * from userInfo where age = 22 or age = 25;

查询第一条数据

db.userInfo.findOne();

至关于:selecttop 1 * from userInfo;

db.userInfo.find().limit(1);

查询某个结果集的记录条数

db.userInfo.find({age: {$gte: 25}}).count();

至关于:select count(*) from userInfo where age >= 20;

 

今天说的知识点有点多,须要记得也比较多,有须要的地方能够记下来,方便运用,好了,就这么多了。php

相关文章
相关标签/搜索