中间件回调函数示例

中英双语

下表提供了可用作 app.use()app.METHOD()app.all()callback 参数的中间件函数的一些简单示例。尽管这些示例适用于 app.use(),但它们也适用于 app.use()app.METHOD()app.all()

用法例子

单一中间件

您可以在本地定义和挂载中间件函数。

app.use(function (req, res, next) {
  next()
})

路由器是有效的中间件。

var router = express.Router()
router.get('/', function (req, res, next) {
  next()
})
app.use(router)

Express 应用程序是有效的中间件。

var subApp = express()
subApp.get('/', function (req, res, next) {
  next()
})
app.use(subApp)

系列中间件

您可以在同一挂载路径中指定多个中间件函数。

var r1 = express.Router()
r1.get('/', function (req, res, next) {
  next()
})

var r2 = express.Router()
r2.get('/', function (req, res, next) {
  next()
})

app.use(r1, r2)

数组

使用数组对中间件进行逻辑分组。

var r1 = express.Router()
r1.get('/', function (req, res, next) {
  next()
})

var r2 = express.Router()
r2.get('/', function (req, res, next) {
  next()
})

app.use([r1, r2])

组合

您可以结合上述所有挂载中间件的方式。

function mw1 (req, res, next) { next() }
function mw2 (req, res, next) { next() }

var r1 = express.Router()
r1.get('/', function (req, res, next) { next() })

var r2 = express.Router()
r2.get('/', function (req, res, next) { next() })

var subApp = express()
subApp.get('/', function (req, res, next) { next() })

app.use(mw1, [mw2, r1, r2], subApp)

以下是在 Express 应用程序中使用 express.static 中间件的一些示例。

从应用程序目录中的 "public" 目录为应用程序提供静态内容:

// GET /style.css etc
app.use(express.static(path.join(__dirname, 'public')))

仅当请求路径以 "/static" 为前缀时,将中间件安装在 "/static" 以提供静态内容:

// GET /static/style.css etc.
app.use('/static', express.static(path.join(__dirname, 'public')))

通过在静态中间件之后加载记录器中间件来禁用静态内容请求的日志记录:

app.use(express.static(path.join(__dirname, 'public')))
app.use(logger())

提供来自多个目录的静态文件,但 "./public" 优先于其他目录:

app.use(express.static(path.join(__dirname, 'public')))
app.use(express.static(path.join(__dirname, 'files')))
app.use(express.static(path.join(__dirname, 'uploads')))