Express 4.x中间件morgan(logger)的详细解析
来源:互联网 发布:秦时明月动漫知乎 编辑:程序博客网 时间:2024/06/10 17:51
开头先说写无关的话: 看了很多技术博客,最痛恨的就是那种拷贝粘贴党,要么就是那种原文翻译混乱党, 都是属于无脑型。
不仅如此,格式也是让人心生绝望。浪费了很多时间。
当然有些人写这些只是给自己记的笔记,自己也不能太过激。
好了,牢骚发过了,现在写正题。
express 4.x相比express 3.x有很大的改进。
特别是中间件方面,已经不再兼容,需要自己去下载。
所以只要碰到这种格式的 express.middleware, 在express 4.x都是用不了的。
以前的中间件logger模块,现在已经改名叫morgan了。
愚蠢的我也是踩了这些坑。
先安装模块
npm install morgan --save
morgan的用途就是记录http通信时的操作日志。
先上点代码吧。
这是服务器端, app.js:
var express = require('express'); var morgan = require('morgan');var app = express();app.use(morgan('combined'));//运用中间件,‘combined’是日志显示的格式,后面会看到什么样app.get('/index2.html', function (req, res) { res.sendFile(__dirname + '/index2.html');}); //将本地文件夹中的index2.html文件传到客户端app.post('/index2.html', function (req, res) { req.on('data', function (data) { console.log(data.toString()); res.end(); }); //响应index2.html的post请求 });app.listen(1338);//监听localhost:1338端口
这是客户端html2.html文件:
通过ajax来post表单的信息,我承认有点傻,其实直接表单提交就好了,但是就当是再学习下ajax吧。
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <script> function submitData() { var obj = { firstname: document.getElementById('txtFirstName').value, lastname: document.getElementById('txtLastName').value, }; var xhr = new XMLHttpRequest(); xhr.open('POST', 'index2.html', true); xhr.onload = function (e) { if (this.status == 200) { document.getElementById('result').innerHTML = this.response; } }; xhr.send(JSON.stringify(obj)); } </script></head><body> <form id="form1"> firstname: <input type="text" id="txtFirstName" name='firstname' value='ss' /></br> lastname: <input type="text" id="txtLastName" name="lastname" value="ll" /></br> <input type="button" value="submit" onclick="submitData()" /> </form> <output id="result"></output></body></html>
来,咱们运行起来
yourPath/node app.js
打开浏览器输入
http://localhost:1338/index2.html
看看你的node.js控制台吧:
可以看到如下界面:
先看看你的node.js的控制台吧:
::1 - - [23/Aug/2017:03:40:52 +0000] “GET /index2.html HTTP/1.1” 200
1095 “-” “Mozilla/5.0 (Wi ndows NT 6.1; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36 “
点击submit按钮后,再看看你的node.js控制台吧。
{“firstname”:”ss”,”lastname”:”ll”}
::1 - - [23/Aug/2017:03:42:27
+0000] “POST /index2.html HTTP/1.1” 200 - “http://localhost:1338 /index2.html” “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36
(KHTML, like Gecko) Chro me/60.0.3112.101 Safari/537.36”
记录了一堆信息,但是格式那是相当的乱。
好了,现在问题来了,我怎样保存这些信息呢?
morgan提供了写入文件流来将这些信息保存在文件中:
我们改下服务端代码:
var express = require('express');var morgan = require('morgan');var fs = require('fs');//加了文件操作的模块var path = require('path');//加了解析路径的模块var app = express();var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flag: 'a' });//创建一个写文件流,并且保存在当前文件夹的access.log文件中app.use(morgan('combined', { stream: accessLogStream }));//设置开启文件流,并且指明文件流的对象app.get('/index2.html', function (req, res) { res.sendFile(__dirname + '/index2.html');});app.post('/index2.html', function (req, res) { req.on('data', function (data) { console.log(data.toString()); res.end(); });});app.listen(1338);
再次运行并且重复上面的操作,看看你的日志文件吧:
内容已经成功保存!
可是有人说这些太乱七八糟了,我其实只想保存少量信息,没问题!
你可以这样写:
app.use(morgan('tiny', { stream: accessLogStream }));
这样仅仅保存有限的信息
运行出来信息是这样的:
GET /index2.html 304 - - 6.205 ms
还有人比较有强迫症,说我只能接受某种格式,不想用正则再转换了!
这个。。。也行!
我们再次改下运用中间件的方法:
app.use(morgan(function (tokens, req, res) { return [ tokens.method(req, res), tokens.url(req, res), tokens.status(req, res), tokens.res(req, res, 'content-length'), tokens['response-time'](req, res) + 'ms' ].join('\r\n') }, { stream: accessLogStream }));//让每条自己设定的信息换行显示
那么你的文件出现是这样的:
GET /index2.html
3047.853ms
这就是morgan中间件的大致用法。
详细用法还是看官方文档把。不过知道了这些,再来看官方文档就是so easy 了。
- Express 4.x中间件morgan(logger)的详细解析
- Express 4.x中间件morgan(logger)的详细解析
- Express 4.x中间件express-session的详细解析
- Express 4.x中间件multer的详细解析
- Express 4.x中间件methodOverride的详细解析
- express中间件--Morgan
- Express 4.x 使用CORS跨域的详细解析
- express 4.X 使用multer中间件 上传文件
- morgan中间件记录日志
- morgan中间件记录日志
- nodejs开发中间件morgan
- express里的中间件
- 关于express中间件的简要解析之应用级、路由级中间件(一)
- 深入理解express的中间件
- express的中间件basicAuth详解
- express的中间件use,Router
- Express 常用中间件 body-parser 实现解析
- Logger的解析使用
- python3的pkl文件转换成python2的pkl文件【pickle】
- 进程_端口
- Java内存模型与线程的实现
- 发送广播监听网络状态
- 匿名内部类总结
- Express 4.x中间件morgan(logger)的详细解析
- Java 集合深入理解(5):AbstractCollection
- java设计模式之单例模式
- IR21系列栅极驱动自举升压原理
- Redis提供的持久化机制(RDB和AOF)
- URL.createObjectURL和URL.revokeObjectURL
- HDU 6162 Ch's gift
- POJ3045+3258+2231
- STM32单片机—编码器测速