express和MongoDB
来源:互联网 发布:域名whois怎样查询 编辑:程序博客网 时间:2024/06/11 02:11
express 介绍
什么是 express ?
- 基于 Node.js 平台开发的 “web 开发框架” ,就是一个 node.js 模块
- express的作用:它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
- express 同时也是 Node.js 的一个模块
express 官方网站
- http://expressjs.com/
- http://www.expressjs.com.cn/
express 特点
- 实现了路由功能
- 中间件(函数)功能
- 对 req 和 res 对象的扩展
- 可以集成其他模板引擎
express 基本使用
安装 express
npm 搜索,安装。按照文档一步一步进行
- 创建 package.json文件
- 安装 express 模块:
npm install express --save
在 express 中,request 对象 和 response 对象一样使用,同时这两个对象还额外添加了其他的好用功能
- res.send() 是 res.end()的扩展
- 步骤总结:
1、加载 express 模块
2、创建 express 实例(一般叫 app )
3、设计路由
4、启动监听服务
补充知识:
- 路由:请求路径(URL) + 请求方法(post、get、……)
- http 请求方法介绍:https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods
使用 express 框架模拟 Apache 服务器处理静态资源
主要使用到的方法
express.static('public')
express.static('public')
的返回值就是一个函数,这个函数的作用就是根据请求,读取静态资源文件并响应给用户- 注意:static() 方法参数路径要写 绝对路径,不要写相对路径。相对路径还是相对执行node命令的路径
主要使用到的方法
app.use()
- use()方法的参数1表示”虚拟路径”,参数2表示要开放的静态资源目录
如何向客户端发送单个静态文件
- res.sendFile() 方法
托管静态资源时的两个注意点:
// 问题一、app.use(express.static('./public'));app.use(express.static('./file')); // 问题二、app.use('/aaa', express.static('./public'));app.use('/bbb', express.static('./public'));
介绍一下 express 中的中间件
中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。
常规中间件(应用级中间件)的回调函数,一般有3个参数
- req, res, next
- 其中next()是一个函数,通过这个函数把执行流程交给下一个中间件
可以挂在中间件的部分方法
- app.use()
- app.get()、app.post()、app.put()、app.delete()、…等各种请求方法
- 注意:在挂载中间件时 next() 方法的重要性,不调用该方法无法执行到下一个中间件
中间件的应用场景
- 利用中间件实现记录日志功能
- 利用中间件模拟body-parser功能
介绍在 express 中如何使用模板引擎
- 在 express 中, res对象是具有redner方法的,但是需要自己配置一个模板引擎
- 在 express 中渲染单个文件,使用res.sendFile
- res.render()要在设置好模板引擎后再使用
ejs模板引擎介绍
- 打开 npm 搜索 ejs
- ejs使用
- ejs.render(str, data, options);
在 express 中配置使用 ejs 模板引擎
- npm install ejs –save
- 通过 app.set(‘views’, ‘路径’); 和 app.set(‘view engine’, ‘模板引擎名称’);来配置模板引擎
- 配置好后就可以通过 res.render(‘a.ejs’, {})来渲染模板
express 中的 request 对象的成员:
http://www.expressjs.com.cn/4x/api.html#req
express 中的 response 对象的成员:
http://www.expressjs.com.cn/4x/api.html#res
模板引擎后缀替换
- app.engine(‘.ejs’, require(‘ejs’).renderFile)
- app.set(‘view engine’, ‘ejs’)
2、在 express 中使用模板引擎
- 在 express 中, res对象是具有redner方法的,但是需要自己配置一个模板引擎
- 在 express 中渲染单个文件,使用res.sendFile
- res.render()要在设置好模板引擎后再使用
- npm install ejs –save
- 通过 app.set(‘views’, ‘路径’); 和 app.set(‘view engine’, ‘模板引擎名称’);来配置模板引擎
- 配置好后就可以通过 res.render(‘a.ejs’, {})来渲染模板了
3、模板引擎后缀替换、
- 设置后缀为 .ejs
+ app.engine(‘.ejs’, require(‘ejs’).renderFile)
+ app.set(‘view engine’, ‘ejs’)
- 设置后缀为 .html
- app.engine(‘.html’, require(‘ejs’).renderFile)
- app.set(‘view engine’, ‘html’)
- 参考链接:https://cnodejs.org/topic/530318fa5366a72a2c070a5d
- http://www.cnblogs.com/dubaokun/p/3446206.html
- http://www.expressjs.com.cn/4x/api.html#app.engine
4、body-parser 使用
+ npm install
+ 在模块中 require(‘body-parser’)
+ 在 express 中配置
“`javascript
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
// parse application/json app.use(bodyParser.json())
“`
# 其他
1. res.send() 方法
- 参数可以是字符串、Buffer对象、数组(json对象)、普通对象
- 通过调用该方法进行响应的时候,会自动添加一些响应头(Content-Type、Content-Length等)
MongoDB
介绍
MongoDB 是什么?
- MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。
- MongoDB是一种文档导向的数据库管理系统, 里面存储的是类似于 json 的文档(BSON)
- 即可以用一条记录(一个文档)表示非常复杂的层次关系
- 文档是 MongoDB 中数据的基本单元
- 一堆文档放在一起就表示一个集合(类似于关系型数据库中的没有模式的“表”)【集合就是一组文档】
- 不需要提前设计表模式
- 快速
- 分布式存储(高可扩展性)
- 非关系型数据库
- 单个 MongoDB 实例上可以有多个数据库
- MongoDB 自带 JavaScript Shell
- 每一个文档都有一个 _id 键,用来唯一标识一个集合中的某一条数据(文档)
为什么选择 MongoDB
- 学习成本较低
- 和 Node.js 结合最好,对 JavaScript 兼容较好
参考网站
- 官网
- 中文页介绍
- MongoDB中文社区
- MongoDB菜鸟教程
安装 MongoDB
Install on OS X
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/Install on Windows
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/安装配置步骤:
- 安装 mongodb
- 配置环境变量
- 在 cmd 中输入 mongo –version 检查是否配置好了环境变量
- 创建 C:\data\db 目录(在哪个目录启动 mongod 就在哪个磁盘根目录下创建 data 下的 db 目录)
- 在 cmd 中输入 mongod
- 启动成功: waiting for connections on port 27017
- 注意:官方不再支持32位版本了
启动时指定数据保存路径
mongod –dbpath d:\itcast\xxmongo shell 客户端连接数据库
- mongo
- mongo –host 192.168.1.10 –port 27017
- mongo 127.0.0.1:27017/sms
mongo shell 停止服务
use admindb.shutdownServer();
mongodb shell 命令
// 1. 查看当前实例下有哪些数据库、> show dbs// 2. 查看当前在哪个数据库下面> db// 3. 进入某个数据库> use sms// 4. 查看当前数据库下有哪些集合> show collections// 5. 创建一个新的数据库(必须在该数据库下再创建集合,否则该数据库并不会创建)> use NewDB// 6. 向集合中插入数据> db.xxx.insert({name: '小哥', age: 17, gender: 'boy'});// 7. 查询集合中的数据> db.xxx.find();> db.xxx.find().pretty();// 8. 条件查询> db.xxx.find({age: 16});> db.xxx.find({age: {$gt: 16}});> db.xxx.find({age: {$gte: 16}});> db.xxx.find({age: {$lt: 17}});> db.xxx.find({age: {$lte: 17}});// 9. 更新// 9.1 替换,找到 name = '老公' 的,将这个对象替换成 {name: '老宫'}> db.xxx.update({name: '老公'}, {name: '老宫'});// 9.2 修改> db.xxx.update({name: '花花'}, {$set: {gender: '女'}});// 9.3 增长$inc> db.xxx.update({unitprice: 200}, {$inc: {id: 30}});// 9.4 更新多行> db.xxx.update({gender: '男'}, {$set: {name: '小明'}}, {multi: true});// 10. 删除// 全部删除> db.xxx.remove({});// 根据条件删除> db.xxx.remove({age: {$gte: 18}});
MongoDB 注意点
- 文档中键值对是有顺序的(顺序不同的两个文档被认为是两个不同的文档)
{name: ‘steve’, age: 18}
{age: 18, name: ‘steve’}
- 文档中不能有重复的键
{age: 18, name: ‘steve’, age: 20}
- 集合是无模式的,一个集合里的文档可以是各式各样的。
启动数据库服务、连接访问数据库
启动数据库服务
- 创建目录
c:\data\db\
- 在启动的时候,可以通过
--dbpath
指定数据服务存储数据的目录
- 在启动的时候,可以通过
- 在命令行输入
mongod
启动服务 - 停止服务:按 ctrl + c,不要直接通过关闭 cmd 窗口的方式来关闭
提示:如果不加 --dbpath
, mongod 会自动使用 执行命令所属磁盘根目录/data/db
目录作为自己的数据存储路径,
所以,如果当前磁盘已经有了 磁盘根路径\data\db
目录了,可以省略 --dbpath
。
执行完上面的命令并成功开启 MongoDB 数据服务实例之后,就把该控制台最小化到一边就可以了,
千万不要关闭,否则关闭终端就是关闭数据库了,
连接数据库
- 再打开一个 cmd 窗口
- 通过 mongo 命令连接数据库服务器
- mongo 命令默认去连接本机上的 MongoDB 服务实例:
127.0.0.1:27017
- 可以通过下面的命令,指定连接的主机名和端口号:
mongo --host 127.0.0.1 --port 27017
提示:如果提示 “无法连接主机”,请检查你的 MongoDB 数据服务实例是否开启。
MongoDB 数据存储结构
- 传统的关系型数据库中存储结构
- 一个机器上安装数据库其实就是安装了一个数据服务实例
- 一个数据服务实例上可以有多个数据库
- a 网站的用户
- b 网站的用户
- a 网站的用户表、b 网站的用户表
- 一个数据库中可以有多张表
- 一张表中可以存储多条记录数据
数据服务实例 -> 数据库 -> 表 -> 记录
在一个数据服务中可以有多个数据库
- 在一个数据库中可以有多个集合
- 在 MongoDB 中,把表称之为集合
- 集合简单理解就是一个数组
- 在一个集合中可以有多个对象(json)(在mongodb 中称之为文档),是一个特殊的 json 对象
- 称之为 bson
基本操作命令
show dbs
- 查看当前服务实例上所有的数据库
use 数据库名称
- 这个命令表示切换到指定的数据库
- 如果没有,也不会创建
- 如果已经有了,则表示切换到这个数据库对该数据库进行操作
- 连接到数据库之后,默认有一个变量叫做:db,终端默认把 db 赋值给了 test
db
- 查看当前所处的数据库
db.集合名称.insert(数据文档)
show collections
- 查看当前数据库中所有的集合
db.集合名称.find()
- 查询指定集合中所有的数据
- 可以通过
db.集合名称.find().pretty()
美化输出格式 - 默认是查询所有,可以通过:
db.集合名称.find({查询条件})
按条件查询集合中的数据
db.集合名称.update({更新条件}, {$set: {要更新的字段}})
- 更新指定集合数据
db.集合名称.remove({删除条件})
- 删除指定集合中的数据
参考文档:https://docs.mongodb.com/manual/crud/
使用 MongoDB 官方提供的 mongodb 驱动包操作 MongoDB 数据库
安装:
npm install mongodb --save
CRUD:
参考文档:
- https://www.npmjs.com/package/mongodb#connecting-to-mongodb
- http://mongodb.github.io/node-mongodb-native/2.2/
var mongodb = require('mongodb')// 连接路径URLvar url = 'mongodb://localhost:27017/itcast'var MongoClient = mongodb.MongoClient// ================== 插入数据 ==================// 1. 连接数据库(打开冰箱门)// MongoClient.connect(url, function (err, db) {// if (err) {// throw new Error('连接失败')// }// // 2. 把大象放到冰箱// db// .collection('heros')// .insert({ name: '张飞', gender: '男', age: 23 }, function (err, result) {// if (err) {// throw new Error('插入数据失败')// }// console.log(result)// // 3. 关上冰箱门// db.close()// })// })// ================== /插入数据 ==================// ================== 查询数据 ==================// MongoClient.connect(url, function (err, db) {// if (err) {// throw new Error('连接失败')// }// // 查询所有// // db.collection('heros').find({}).toArray(function (err, docs) {// // if (err) {// // throw new Error('查询数据失败')// // }// // console.log(docs)// // })// // 按条件查询// db.collection('heros').find({name: '张飞'}).toArray(function (err, docs) {// if (err) {// throw new Error('查询数据失败')// }// console.log(docs)// })// })// ================== /查询数据 ==================// ================== 更新数据 ==================// MongoClient.connect(url, function (err, db) {// if (err) {// throw new Error('连接失败')// }// db.collection('heros').updateOne({name: '张飞'}, {// $set: {// age: 20// }// }, function (err, result) {// if (err) {// throw new Error('更新失败')// }// console.log(result)// })// })// ================== /更新数据 ==================// ================== 删除数据 ==================// MongoClient.connect(url, function (err, db) {// if (err) {// throw new Error('连接失败')// }// db.collection('heros').deleteOne({name: '张飞'}, function (err, result) {// if (err) {// throw new Error('删除失败')// }// console.log(result)// })// })// ================== /删除数据 ==================
MongoDB 概念解析
在mongodb中基本的概念是文档、集合、数据库,。
SQL术语/概念 MongoDB术语/概念 解释/说明:
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键
参考:http://www.runoob.com/mongodb/mongodb-query.html
- express和MongoDB
- express MongoDB
- vue-cli 和 express+mongodb结合!
- Ubuntu12.04 Node.js MongoDb 和 express框架的搭建
- 基于express和mongodb的任务管理系统
- 20160812mongodb增删改查和express的理解
- 基于Express React AntD和MongoDB构建一个CMS系统
- nodejs/express+mongodb/mongoose
- nodejs+express+mongodb
- nodejs+express+mongodb安装
- express引入mongodb
- nodejs+express+mongodb入门
- Nodejs Express 连接Mongodb
- NodeJS+Express+MongoDB
- express使用MongoDB数据库
- node-express-jade-mongodb
- NodeJS+Express+MongoDB
- job--express-mongodb
- SDNU-DFS——B
- 风投报告:2017下半年VR/AR娱乐领域投资额同比上升79% 【52翻译】
- 一款最流行的MVPArms MVP快速集成框架Retoift,Okhttp,RxCache,Gson,RxLifeCycle, Dagger2,Rxjava,ImageLoader
- 小学奥数思维训练题(七)
- 正则表达式匹配含有空的的一个字符串
- express和MongoDB
- 13位的时间戳如何使用Excel表格转换为真实时间
- 拖动滚动条也可使文字滚动
- Android Studio 翻译插件Translation的安装
- springboot war打包步骤
- PAT 1018.锤子剪刀布 C++
- 谷歌大脑「辛顿」团队最新研究:将神经网络提炼成「软决策树」
- 首发 | Gyrfalcon加入芯片角斗场,又一款改变AI界的产品问世
- $.getJson(url,data,callback)回调函数不执行的问题