1.what中间件
就是请求
req
和响应res
之间的一个应用
浏览器向服务器发送一个请求后,服务器直接通过
request
定位属性的方式得到通过request
携带过去的数据,就是用户输入的数据和浏览器本身的数据信息
这中间就一定有一个函数将这些数据分类做了处理,最后让request对象调用使用,这个处理函数就是我们所所得中间插件。
比如生活中的买家和汽车厂家,中间需要一个4s来搭桥,这个4s就类似于中间件
比如生活中的商家和消费者,中间需要一个平台(牟东,某宝)来搭桥,这个平台就类似于中间件
比如生活中的租客和房主,中间需要一个中介来搭桥,这个中介就类似于中间件
语法:
app.use("路由",function(req,res,next){});
express的路由匹配顺序是从上往下依次匹配
2.每个请求加事件戳
其实这里类似 日志的一个思想雏形
服务端需要记录接收到的每次请求具体信息 (比如参数,请求方式等)
还需要记录每次请求的时间,
因为生成环境出的问题,需要排查,有些也不容易复现,所以查看日志非常重要
这个中间件 匹配所有路由,所有的请求都会进来,也就能获取所有的请求信息
响应信息也可以获取,写到日志文件里面 形成清晰的日志,便于以后查看
这个正则比较简陋, 能理解意思就行
核心代码
app.use(/\/.*/, function (req, res, next) {
//这里可以 获取请求的参数 ,返回的参数
//写到日志文件里面 形成日志
console.log(new Date().toLocaleString());
// next是一个函数,调用next相当于告诉express,继续向下执行代码
next();
});
3.路由
app.use("/admin",function(req,res,next){
console.log("这是中间件请求的admin路由");
next();
});
app.get("/admin",function(req,res){
console.log("这是get请求的admin路由");
res.end();
});
admin
get和use都会匹配
admin/level1
只有use
会匹配
4.总结
中间件语法与路由语法的区别:
1. 中间件语法里的回调函数里多一个next参数
2. 中间件的语法里可以不写第一个路由参数, 如果不写, 表示通配路由;
路由语法如果不写第一个参数,什么都匹配不上
3. 中间件语法的第一个参数对路由值的匹配是开头模糊匹配,
路由语法的第一个参数对路由值的匹配是精确匹配.
5.后续
更复杂的内容 放到token在祥讲
6.静态资源
可以设置多个静态资源目录
因为开发过程可能 图片资源单独放一个目录
音视频单独放一个资源目录
Express 在静态目录查找文件,因此,存放静态文件的目录名不会出现在 URL 中。
通过如下代码就可以将 public 目录下的图片、CSS 文件、JavaScript 文件对外开放访问了
// public作为静态资源根目录
//里面可以放图片 css js等资源
app.use(express.static("public"))
app.use(express.static("public2"))
上面如果不行 可以加上路径
app.use(express.static(__dirname+"/public"))
app.use(express.static(__dirname+"/public2"))
更多信息查看下方链接
express-静态资源目录
地址栏换成你的端口 和静态资源目录下的文件名就哦了
Express 在静态目录查找文件,因此,存放静态文件的目录名不会出现在 URL 中。
- 现在,你就可以访问 public 目录中的所有文件
http://localhost:3000/images/kitten.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/app.js
http://localhost:3000/images/bg.png
http://localhost:3000/hello.html
2.注意 不要带上静态资源目录的名字比如
public
这个在地址栏不要写 ,否则访问不到
3.可以把自己之前写的项目放到这个服务器目录下
然后再地址栏输入 通过浏览器访问
6. 创建虚拟路径
1.静态资源路径写法1
app.use('/static', express.static(__dirname+'/public')
2.静态资源路径写法2
const path = require('path')
app.use(express.static(path.join(__dirname, 'public')))
现在,你就可以通过带有 /static 前缀地址来访问 public 目录中的文件
- http://localhost:3000/static/images/kitten.jpg
- http://localhost:3000/static/css/style.css
- http://localhost:3000/static/js/app.js
- http://localhost:3000/static/images/bg.png
- http://localhost:3000/static/hello.html
7.扩展话痨
这个目录就是服务器目录,比如
php
的www
目录
早期,或者说为了省事,测试的时候前端会把代码压缩给服务端,服务端同事解压后也会放入到他本地的服务器目录,然后给前端人员一个地址,前端在这个地址上测试,迭代,直到没有问题,在由后端人员发布到
生产环境
大体流程是这样的,但是具体测试,谁把代码放到服务器不一定
现代互联网公司 会通过一些构建工具,例如我之前经常使用的是
Jekins
里面主要是通过脚本配置来发布测试代码和线上代码
大体内容如下
- 从
gitlab
或者公司指定的仓库拉取代码- 将拉取的代码通过一些指令远程拷贝到服务器指定目录
这其中第一步 例如
gitlab
上会有很多分支,测试环境的分支,开发环境的分支,线上环境的tag分支等
拉取代码肯定需要配置相应的gitlab
对应权限的账号
不同环境不同的分支 都是配置,配置一次,以后自动化,点击对应的功能按钮就好
远程拷贝等一些常规指令,需要大体能看懂,之前还自学,外加向运维同学请教, 学了不少,可惜现在忘完了,看到指令的话还能认识,
这里边可能还牵扯到一些 名字
割接
,跳板机
割接
比如网络扩容,设备更新,就是网络改造中的对接操作
跳板机
因为有些服务器就只是服务器,存放资料的,硬盘,没有屏幕,而且肯定也都在大机房,或者海底,山里,往上面拷贝东西,肯定也不会让你直接访问的,需要通过中介,层层跳转过去操作,那些中介电脑就是跳板机
参考资料
express-静态资源目录