开头先说写无关的话: 看了很多技术博客,最痛恨的就是那种拷贝粘贴党,要么就是那种原文翻译混乱党, 都是属于无脑型。
不仅如此,格式也是让人心生绝望。浪费了很多时间。
当然有些人写这些只是给自己记的笔记,自己也不能太过激。
好了,牢骚发过了,现在写正题。
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
304

7.853ms

这就是morgan中间件的大致用法。
详细用法还是看官方文档把。不过知道了这些,再来看官方文档就是so easy 了。

Express 4.x中间件morgan(logger)的详细解析相关推荐

  1. nodejs开发 过程中express路由与中间件的理解 - pyj063 - 博客园

    nodejs开发 过程中express路由与中间件的理解 nodejs开发 express路由与中间件 路由 通常HTTP URL的格式是这样的: http://host[:port][path] h ...

  2. 洋葱模型php,比较express与koa中间件模式的区别与联系

    本篇文章主要介绍了详解express与koa中间件模式对比,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 起因 最近在学习koa的使用, 由于koa是相当基础的web框架 ...

  3. Express使用nodemailer完成邮箱验证功能详细流程(含封装,可作自定义模块)

    Express使用nodemailer完成邮箱验证功能详细流程(含封装,可作自定义模块) 记录大创项目中,在express中使用第三方模块nodemailer完成邮箱验证功能,含客户端请求验证邮件和服 ...

  4. class07:Express框架、中间件

    这里写目录标题 一.express模块 1. 安装使用express 2. 设置跨域 二.中间件 1. 跨域中间件 2. 后端获取前端发送的数据 2.1 get方式 2.2 post方式 一.expr ...

  5. nodejs框架express之错误中间件(初学)

    nodejs框架express之错误中间件(初学) //引入express框架 const express = require('express'); const fs = require('fs') ...

  6. 在yog2框架中自建模块,以实现socket.io与express共享session中间件

    导引 最近遇到了一个需要在yog2框架中增加websocket服务的案子,此文主要讲在案子过程中碰到的一些问题和解决方案 前言 一.如果你只是想要解决socket.io与express共享解析sess ...

  7. nodejs框架express之使用中间件(初学)

    nodejs框架express之使用中间件(初学) //引入express框架 const express = require('express'); //创建网站服务器 const app = ex ...

  8. 前端头像上传功能实现之普通图片/头像上传 详细解析1【扩展知识FormData对象】

    上传的图片/头像有两种方案上传 第一种我们不对图片做处理直接上传到服务器端,把图片上传到服务器的img文件夹当中,然后我们把图片的地址信息存储在数据库当中,用图片的时候我们直接调用地址 第二种方案是我 ...

  9. DophinScheduler server部分 核心代码详细解析——掌控任务和进程的呼吸与脉搏:log、monitor与registry

    2021SC@SDUSC 文章目录 一.整体结构 二.具体分析 1.log 1.LoggerRequestProcessor 2.LoggerServer 3.MasterLogFilter 2.mo ...

最新文章

  1. 二、OCR训练时,将txt文件和图片数据转为lmdb文件格式
  2. hdu 4059 The Boss on Mars
  3. Boost:列出设备的测试程序
  4. 标准正弦波变频电源调制方式的实现
  5. oracle01537,ORACLE REUSE实验
  6. mysql 从 a表updateb表_mysql A表自动更新和插入B表的数据
  7. R语言聚类算法之k中心聚类(K-medoids)
  8. 英特尔推出业界领先的AI与数据分析平台,全新处理器、内存、存储、FPGA解决方案集体亮相
  9. MMUlinux内核开启
  10. 数据可视化大屏真不是个事,这 30 个精美的模板拿走吧
  11. goland 注释模板_【精品】金工实习心得体会模板合集5篇
  12. 【运维心得】只有百度能打开,其他页面打不开怎么办?
  13. 靠着这份“葵花宝典”,让我收到了6个大厂的offer(华为+字节+腾讯+京东+网易+滴滴)
  14. sqlserver之远程访问配置
  15. 使用Java在浏览器页面无法导出excel表格
  16. Python从入门到精通 | Python作用与定义 | 三种注释的语法(三)
  17. 开启子进程的两种方式、进程间内存空间隔离、进程对象的方法或属性详解
  18. 物流仓储行业专业术语解释
  19. 正则表达式元字符 和限定字符
  20. 什么是polyfill

热门文章

  1. 机器学习偏差、方差、泛化误差的完整总结
  2. 优化概率神经网络_Bayesian Neural Networks:贝叶斯神经网络
  3. 实践--简版知乎日报
  4. 解决IE提示“是要保存此文件,还是联机查找程序来打开此文件”
  5. STM32--ESP8266物联网WIFI模块(贝壳物联)--温湿度数据上传服务器显示
  6. 咻商跨境电商丨Shopee开店相关干货分享!
  7. /proc/sysrq-trigger说明【转】
  8. java编程之线程,继承Thread类,匿名内部类的写法
  9. 《长津湖》短评简单分析
  10. 关于一些初级ACM竞赛题目的分析和题解(六)。