![sss]()
寒假把Node.js+Mongodb看了看,也是看得黑马的,那位老师讲的真不错,很耐心。看这个视频主要了解了前后端是如何交互的原理,后端是如何管理权限的,可能后端语言(Java,PHP……)管理权限各不相同吧,应该原理都一样吧,Node是通过判断你的Url然后来判断加载哪个页面,而且Node开发一般是混合开发,很多前端的页面都放在Node服务器上,图片,CSS,JS文件都放在静态资源文件下,在请求的时候,更快捷。接着是Mongodb,其实这个也是跟着那位老师学的,只有几课时,简单的了解了下,它的增删改查非常方便,都是封装好的API,直接调用即可,也不用我们建表,只是你在连接数据库的时候会指定一个表名,它就会给你自动建好。
跟着这位老师,简单做个几个小demo:
- 留言板
- 一个登录注册博客界面(现在里面内容没完善)
创建一个Node项目时首要操作
- 初始化项目
npm init -y
导包
创建静态资源文件存放位置
img css js
路径path模块
常用pathAPI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| 1. path.basename("路径","文件的后缀名")
获取一个给定路径的文件名 path.basename("路径","文件的后缀名")
2. path.dirname("路径")
获取给定路径的目录
3. path.extname("路径")
获取给路径的后缀名 .js .css .....
4. path.isAAbsolute("路径")
获取给定路径的绝对路径
5. path.parse("路径")
把一个路径转换为对象
6. path.join()
|
Node中的非模块成员
1 2 3 4 5 6 7
| 1. _dirname **动态获取**当前文件的所属路径的绝对路径
2. _filename **动态获取**当前文件的绝对路径
|
通过 jQuery 来获取表单提交内容
给表单一个id
通过 给表单id 绑定 submit 事件,并且阻止默认事件,
通过ajax 请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $("#form的id").on('submit',function(e){ e.preventDefault() var formData = $(this).serialize() jquery获取表单提交信息 $.ajax({ url:"提交路径", --- 一般是服务端写好,给定传送url type:"post", data:formData, dataType:'json', success:function(data){ console.log(data) } }) 这样就给服务端发送成功了,服务端通过第三方插件 body-parser , req.body来获取客户端传送过来的数据 })
|
Mongodb 数据库下载
1 2
| 1.去官方下载 2.然后配环境, 找到数据库解压的路径,然后将路径放到C盘的环境变量里
|
Mongodb 数据库
创建一个数据模型的文件夹用来分类存放数据
创建数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 1. 请求mongoose var mongoose = require("mongoose") 2.加载设计Schema var Schema = mongoose.Schema 3.new 一个 Schema 设计模型 var userSchema = new Schema({ 这里面设计数据库内容规范 email:{ type:String, required: true 必须有 }, creatTime:{ type:Number, default:Date.now 默认创建时间 }, gender:{ type:Number, enum:[1,-1] enum枚举,1代表xx -1 代表xx } }) 4.最终导出模型 ,提供使用 module.exports = mongoose.model("User",userSchema)
|
Mongodb 数据库 开启
1 2 3
| #1.启动数据库,在盘符下必须有 data文件/db文件,数据库才会开启成功 在控制台输入: mongod 开启成功 #2.关闭数据库,ctrl+c
|
密码加密
1 2 3 4 5 6
| 1. 安装 md5 npm install md5 2. 在项目中导包 var md5 = require("md5") 3. 在需要的地方加密 md5() 例如表单提交的密码 md5(md5(body.password))
|
表单提交
同步提交
提示信息主要靠服务端 来处理
异步提交
服务端发送给前端简单业务的信息,前端负责处理把信息更丰富化
表单默认行为是同步提交,可以通过e.preventDefault() 来阻止默认同步提交,通过Ajax来异步提交
1
| 异步提交:可以通过Ajax回调函数中,判断能否注册,对于各种情况(后台写好的规定,然后拿到相应的状态吗比较)给予不同提示,如果注册成功,通过## window.location.href = '跳转url'
|
服务端重定向只针对同步请求才有效,异步请求无效,如果想异步请求,在前台通过 window.location.href = ‘跳转url’
Cookie 和 Session
Cookie
它是用来保存一些不太敏感的数据,但是不能保存用户的状态
Session
jQuery Ajax Get请求跨域
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| $.ajax({ type: "get", async: true, url: "https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?", dataType: "jsonp", jsonpCallback: "hehe", data: { "wd": val, "cb": "hehe" }, success: function (data) { console.log(data) } beforeSend: function() { }, success: function(data) { }, complete: function() { },
error: function() { }
|
创建服务端项目基本配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| ### 1. 初始化项目
npm i -y
### 2. 新建静态文件
public 中 包括 img js css
### 3.新建路由文件
在路由文件内分别存放路由,如:
login.js 登录路由模块
session.js 会话路由模块
**简而言之,每个路由都有自己的作用**
### 4.新建一个views 文件
views这个文件用来存放一些要服务端渲染的页面
### 5.新建一个models 文件(用来存放 模型数据)
|
###
express 中使用 art-template 模板引擎
1 2 3 4 5 6 7 8 9 10 11 12 13
| 1.安装 npm install --save art-template npm install --save express-art-template 2.配置 var express = require('express'); var app = express(); app.engine('art',require('express-art-template')) art一般替换成html,如果使用art,那么views下的文件必须是art后缀名 3.使用 app.get('/',function(req,res){ res.render("文件",{模板引擎渲染内容}) 这里的文件 必须放在views文件下,而且不需要写路径,直接文件名字,即可加载内容 })
|
静态服务写法
1 2 3
| app.use('/static',express.static(path.join(_dirname,'publick')))
使用上面这种,必须require('path')
|
Node 内容更新,自动重启服务,安装插件
1 2
| 1.安装 npm install -g nodemon 2.使用 npdemon server.js
|
文件职责模块
app.js 入口模块
1 2 3 4 5 6 7 8
| 职责: 创建服务 做一些服务相关配置 模板引擎 body-parse 解析表单post 请求体 提供静态服务资源 挂载路由 监听端口启动服务
|
router.js 路由模块
1 2 3
| 职责: 处理路由 根据不同请求方法+请求路径设置具体内容
|
Express
1.Express 安装
2.Express使用
1 2 3 4 5 6 7 8 9 10 11 12
| 1.导入包 var express = require('express')
2.创建app var app = express()
3. app.get('/',function(req,res){ })
4.监听端口,开启服务 app.listen(3000,function(){})
|
3.Express 提供了封装路由的api
使用方法
1 2 3 4 5 6 7 8 9 10 11 12
| 1.请求exprss var express = reqire("express") 2.加载路由模块 var router = express.Router() 3.将请求挂载到router中 router.get('/',function(req,res){
}) 4. 导出router ,达到模块化编程 module.exports = router 5.在需要的文件中请求 router.js 文件 在文件内部直接 app.use(router)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 1. 安装 npm install express-session # 2.在入口app.js 中加入 var session = require('express-session') # 3. 设置配置 app.use(session({ secret: 'xiaoxin', resave: false, saveUninitialized: true })) ## 这个配置一定要放在 app.use(router) 前 # 4. 设置session req.session.属性 = 值 # 5. 获取session req.seesion.属性
# 通过session,在加上template,就可以控制哪部分显示 # 默认Session数据是存在内存中,服务器一旦重启就会丢失,生产坏境会把啊Session进行持久化存储
|
Express 中获取表单参数数据
获取表单get 请求参数
获取表单post 请求参数 (由于在Express中没有内置post 请求体API,只能使用第三方包 body-parser)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 1.安装 npm install --save body-parser 2.引包 var bodyParser = require('body-parser') 3.配置 app.use(bodyParser.urlencoded({extended: false})) app.use(bodyParser.json())
app.post('/pinglun',function(req,res){ var s = req.body comments.unshift(s) res.redirect('/') })
|
express 中使用 art-template 模板引擎
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 1. 安装
npm install --save art-template
npm install --save express-art-template
2.配置
var express = require('express');
var app = express();
app.engine('art',require('express-art-template'))
art一般替换成html,如果使用art,那么views下的文件必须是art后缀名
3.使用
app.get('/',function(req,res){
res.render("文件",{模板引擎渲染内容})
这里的文件 必须放在views文件下,而且不需要写路径,直接文件名字,即可加载内容
})
|
表单数据处理
1 2 3
| 1. 获取表单数据 2. 去数据库操作(增删改查) 3. 发送响应数据
|
同步请求和异步请求
1 2 3 4 5
| #同步:(整个页面被刷新) 提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事
#异步:(在请求的同时,还可以干其他的事情) 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕
|
静态页–模板页
用户
用户注册逻辑
1 2 3 4 5 6 7
| 1.客户端 处理好客户端页面内容(表单控件name,收集表单,发送数据 2.服务端 获取客户端表单数据 操作数据库 (先查找是否注册账号和数据库里的账户是否重复,如果重复,给予提示,如果没有重复,开始存数据,给予提示) 如果有错,发送500告诉客户端有错误 其他根据业务发送不同相应数据
|
用户登录
1 2 3 4 5
| 1.客户端 发送表单数据(同步/异步都可以,根据情况) 2.服务端 获取表单内容 操作数据库(查询表单提交过来的数据,然后比对,不同情况给予不同提示)
|
用户退出
1 2
| 1.登录时,在服务端的登录,设置存放session, req.session.user = 数据库查找的对象 data , 这样就 达到记住用户的状态了 2. 退出时,将req.seesion.user = null 清空user的session,就可以达到退出状态
|
服务端重定向只对同步请求有效,异步请求无效
res.redirect(“/index”) 针对异步请求,这样是错误的
只能通过在前台 window.location.href= ‘/index’
中间件
1.中间件概念
1
| 它本质是一个请求处理方法,我们会把用户发起的请求到响应整个过程分发到多个中间件中去处理,这样提高了代码的灵活性
|
2.应用级别的中间件
2.1 万能匹配(不关心任何请求路径和请求方法)
1 2 3
| app.use(function(req,res,next){ next() 会执行下一个命令,下个命令如果还有next,继续执行,执到没有next })
|
2.2 以/xxx/开头的
1 2 3
| app.use('/a',function(req,res,next){ next() 会执行下一个命令,下个命令如果还有next,继续执行,执到没有next })
|
路由级别中间件
get
1 2 3
| app.get('/',function(req,res){ console.log("ss") })
|
post
1 2 3
| app.post('/',function(req,res){ console.log("post 请求") })
|
put
1 2 3
| app.put('/',function(req,res){ console.log("增加请求") })
|
delete
1 2 3
| app.delete('/',function(req,res){ console.log("删除请求") })
|