Middleware

basicAuth()

基本的认证中间件,在req.user里添加用户名

用户名和密码的例子:

  1. app.use(express.basicAuth('username', 'password'));

校验回调:

  1. app.use(express.basicAuth(function(user, pass){
  2. return 'tj' == user && 'wahoo' == pass;
  3. }));

异步校验接受参数fn(err, user), 下面的例子req.user 将会作为user对象传递.

  1. app.use(connect.basicAuth(function(user, pass, fn){
  2. User.authenticate({ user: user, pass: pass }, fn);
  3. }))

bodyParser()

支持 JSON, urlencoded和multipart requests的请求体解析中间件。 这个中间件是json(), urlencoded(),和multipart() 这几个中间件的简单封装

  1. app.use(express.bodyParser());
  2. // 等同于:
  3. app.use(express.json());
  4. app.use(express.urlencoded());
  5. app.use(express.multipart());

从安全上考虑,如果你的应用程序不需要文件上传功能,最好关闭它。我们只使用我们需要的中间件。例如:我们不使用bodyParsermultipart() 这两个中间件。

  1. app.use(express.json());
  2. app.use(express.urlencoded());

如果你的应用程序需要使用文件上传,设置一下就行。 一个简单的介绍如何使用.

compress()

通过gzip / deflate压缩响应数据. 这个中间件应该放置在所有的中间件最前面以保证所有的返回都是被压缩的

  1. app.use(express.logger());
  2. app.use(express.compress());
  3. app.use(express.methodOverride());
  4. app.use(express.bodyParser());

cookieParser()

解析请求头里的Cookie, 并用cookie名字的键值对形式放在 req.cookies 你也可以通过传递一个secret 字符串激活签名了的cookie

  1. app.use(express.cookieParser());
  2. app.use(express.cookieParser('some secret'));

cookieSession()

提供一个以cookie为基础的sessions, 设置在req.session里。 这个中间件有以下几个选项:

  • key cookie 的名字,默认是 connect.sess
  • secret prevents cookie tampering
  • cookie session cookie 设置, 默认是 { path: '/', httpOnly: true, maxAge: null }
  • proxy 当设置安全cookies时信任反向代理 (通过 "x-forwarded-proto")
    1. app.use(express.cookieSession());

清掉一个cookie, 只需要在响应前把null赋值给session:

  1. req.session = null

csrf()

CSRF 防护中间件

默认情况下这个中间件会产生一个名为"_csrf"的标志,这个标志应该添加到那些需要服务器更改的请求里,可以放在一个表单的隐藏域,请求参数等。这个标志可以通过 req.csrfToken()方法进行校验。

bodyParser() 中间件产生的 req.body , query()产生的req.query,请求头里的"X-CSRF-Token"是默认的 value 函数检查的项

这个中间件需要session支持,因此它的代码应该放在session()之后.

directory()

文件夹服务中间件,用 path 提供服务。

  1. app.use(express.directory('public'))
  2. app.use(express.static('public'))

这个中间件接收如下参数:

  • hidden 显示隐藏文件,默认为false.
  • icons 显示图标,默认为false.
  • filter 在文件上应用这个过滤函数。默认为false.