为app.use分组表达数组中间件

时间:2018-03-03 09:59:47

标签: node.js

import express from 'express'
import bodyParser from 'body-parser'
import api from 'routes'
import timeout from 'connect-timeout'
import haltOnTimeout from 'middlewares/haltOnTimeout'
import compression from 'compression'
import helmet from 'helmet'
import path from 'path'

const app = express()

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(timeout(3000))
app.use(haltOnTimeout)

app.use(compression()) // production
app.use(helmet()) // production

app.use('/api', api)

app.use(express.static(path.resolve(`${__dirname}/../../client/build`))) // production

export default app

我的app.js就像这样。

现在我要在aws上部署我的应用程序。

为了做到这一点,

我想将我的中间件分成数组并根据环境执行它。

例如,

const middlewares = [
  bodyParser.json(),
  bodyParser.urlencoded({ extended: false }),
  timeout(3000),
  ...
]

const productionMiddlewares = [
  compression(),
  helmet()
  ...
]

对此有何解决方法?

2 个答案:

答案 0 :(得分:1)

标准方式

int

简单方法

app.configure('development', function() {
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
});

app.configure('production', function() {
  app.use(express.errorHandler()); 
});

答案 1 :(得分:0)

您可以浏览所需的数组并注册中间件。例如:

var middlewares= process.env.NODE_ENV == 'production' ? [compression, ...] : [some-other];
middlewares.forEach((middleware) => app.use(middleware));