前端分离与耦合架构
核心思想:前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用json数据进行交互
express是由路由和中间件构成
路由:前端路由:通过不同的url path路径 展示不同的视图
后端路由:通过不同的url path路径 展示不同的数据(就是写接口)
中间件(middleware)是一个函数–他可以访问request对象,响应对象(res),以及处于请求–响应流程中的中间件。一般被命名为next的变量
中间件的功能:
1/可以执行任何代码
2/可以修改请求和响应对象
3/可以结束请求-响应循环
4/可以调用堆栈中的下一个中间件
(js的全局变量是window,node.js的全局变量是global)
npm init 出现page.json
全局安装环境 npm i express -g
2/安装npm i express-generator -g(应用生成器)
3/脚手架创建项目 express -e project_name(项目名字)
express路由分为应用级别路由和路由级别路由
package-lock.json在2017年才出现,,因为node版本升级
ejs特点
1/快速编译和渲染
2/简单的模板标签
3/自定义标记分隔符
4/支持文本包含
<%- include(path) %>引入path代表拟引入其他模板的路径<%- include(‘head.ejs’)%>
5/支持浏览器端和服务器端
6/模板静态缓存
7/支持express视图系统
pageage.json里面 scripts里面 实时更新nodemon 苹果电脑supervisor
mongodb的优点:
1/面向文档储存的数据库
2/具有丰富的查询指令
3/支持索引
4/具有分片系统
5/无模式
缺点:
1/占用空间非常大
2/不支持事务
3/目前已经不维护32位的系统
db.dropDatabase()删除当前的数据库 删除之后无法恢复
mongodb数据库里面的格式为BSON格式
db.users.find().limit(2)查询前5条数据
db.users.find().skip(10) 查询10条以后的数据
db.users.find().limit(7).skip(4)从4条以后开始查查7条
npm i mongodb@2 --save-dev
exprsss跨域问题
nginx反向代理(前端)
Cors后台 npmi i cors --save-dev
在app.js 里面挂载 cors=require(‘cors’)
app.use(cors())
代理第三方服务器,,反向代理
安装依赖
npm i http-proxy-middleware --save-dev
var proxy=require(‘http-proxy-middleware’)
你要代理的地址你只需要协议域名端口号,路径自动拼接
app.use(‘你需要访问的路径’,proxy({target:‘你要代理的地址’,changeOrigin:true}))
app.use(’/herolist.json’,proxy({target:‘http://host810267499.s360.pppf.com.cn’,changeOrigin:true}))
session
npm i express-session -g
npm i express-session --save-dev
var session=require(‘express-session’)
app.use(session({
secret:‘recommend 128 bytes random string’,
cookie:{ maxAge: 20 * 60 * 1000 },
resave:true,
saveUnintialized :true
}))
在登陆地时候在req.session上规定一个username值为你登陆地username req.session.username=req.body.username
登陆名在哪显示在哪个路由渲染地时候传一个键值对值
{username:req.session.username}
^–上面地这个username在你需要用的地方用
销毁session
1)req.session.username=undefined;
2)req.session.destroy(function(err){
if(err){
console.log(err)
}else{
res.redirect(’/’)
}
})
session和cookie的不同
cookie数据存放在客户的浏览器上,session数据放在服务器上
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗
session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
单个cookie的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie
验证token
npm i jsonwebtoken --save-dev
var jwt=require(‘jsonwebtoken’);
生成token,在登陆成功后生成token
let content={name:req.body.username};//token主体
let miyao=‘jwt’//验证使用
let token = jwt.sign(content,miyao,{expiresIn:1011})
把token传给前端,通常前端存在localStorage里面,
其次就是你在点击购物车啊,加购啊这些按钮地时候需要验证token
router.post(’/jiaoyan’,(req,res)=>{
let token=req.headers.token;
let miyao=‘jwt’
jwt.verify(token,miyao,(err,data)=>{
if(err){
res.json({code:401,msg:‘登陆过期’})
}else{
res.json({code:200,msg:‘success’})
}
})
})
db.use.update({name:“小明”},{$inc:{age:10}})
router.get(’/addproduct’,(req,res)=>{
res.render(‘addproduct’,{}) -------------------》渲染一个页面
})
分页器
npm i async --save-dev
异步加载