express中间件和morgan|青训营笔记

484 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第16天

Express中间件的五大分类

应用级别的中间件

通过app.use()  或 app.get()  或 app.post()绑定到app实例上的中间件,叫做应用级别的中间件。

路由级别的中间件

绑定到**express.Router()**实例上的中间件,叫做路由级别的中间件。它的用法与应用级别的中间件没有任何区别。
只不过,应用级别中间件是绑定到app实例上,路由级别中间件是绑定到Router实例上

错误级别的中间件

专门用来捕获整个项目中发生的异常错误,从而防止项目异常错误,从而防止项目一场崩溃的问题。

格式:错误级别的中间件function处理函数中,必须有4个形参,形参顺序从前到后,分别是(err,req,res,next) 必须放到所有路由后面。

Express内置的中间件

自Express 4.16.0 版本开始,Express内置了3个常用的中间件,极大的提高了Express项目的开发效率和体验

express.static 快速托管静态资源的内置中间件,例如:HTML文件、图片、CSS样式等(无兼容性) express.json解析JSON格式的请求体数据(有兼容性,仅在4.16.0+版本可用) express.urlencoded解析URL-encoded格式的请求体数据(有兼容性,仅在4.16.0+版本可用)

第三方的中间件

非Express官方内置的,而是由第三方开发出来的中间件,可以按需下载并配置第三方中间件,从而提高项目的开发效率。 例:express@4.16.0之前的版本中,经常使用body-parser这个第三方中间件,来解析请求体数据,步骤如下: 1、运行 npm install body-parse r安装中间件 2、使用 require 导入中间件 3、调用 app.use() 注册并使用中间件

express中的中间件

情况一 app.use(static)

static必须是函数

情况二 app.use(static())

static的返回值必须是函数

表示所有路由

app.use(中间件) app.use('/*', 中间件)

顺序

在express4.0中,根据路由条件是否满足,中间件和路由时从上到下,一个一个执行。而在express4.0之前,必须显示的把路由连起来,

跳转或者响应

如果一个中间件既不使用next()使路由跳转到下一个中间件,也不响应数据给客户端,请求就会挂起,导致超时。

morgan简介

morgan是express默认的日志中间件,也可以脱离express,作为node.js的日志组件单独使用。

入门

导入

npm install express morgan 

在basic.js加入

var express = require('express');
var app = express();
var morgan = require('morgan');

app.use(morgan('short'));
app.use(function(req, res, next){
 res.send('ok');
});

app.listen(3000);

node basic.js运行程序,并在浏览器里访问 http://127.0.0.1:3000

如何将将日志打印到本地文件

可以配置stream

var express = require('express');
var app = express();
var morgan = require('morgan');
var fs = require('fs');
var path = require('path');
var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), {flags: 'a'});
app.use(morgan('short', {stream: accessLogStream}));
app.use(function(req, res, next){
 res.send('ok');
});
app.listen(3000);