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()
...
]
有什么解决方法吗?
我的 answare 的灵感来自于Sailsjs
你可以有两个配置文件和这样的结构
root
|-app.js
|-package.json
|-bootstrapper.js
|-config
|- middleware.js
基本上,您将在middleware.js
文件中编写按环境划分的中间件,bootstrapper.js 文件将保存将中间件挂载到 express 应用程序的逻辑,引导程序可以使用NODE_ENV变量来选择要挂载的中间件。然后,您的 app.js 将在启动期间调用引导程序。
//app.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'
import bootstrapper from 'bootstrap'
const app = express()
bootstrap.bootMiddleware(app)
app.use('/api', api)
app.use(express.static(path.resolve(`${__dirname}/../../client/build`))) // production
export default app
在您的 middleware.js 文件中,您定义了中间件以及安装它们的顺序,根据您的环境,您将拥有不同的文件。
// */middleware.js
exports.module = {
'dev_middlewares' : [
'bodypParserJson',
// other middlewares
'helmet'
],
'prod_middlewares' : [
'bodypParserJson',
// other middlewares
'helmet'
],
'helmet' : helmet(),
'bodypParserJson': bodyParser.json()
}
然后引导程序将具有挂载适当中间件的功能
// bootstrapper
function loadMiddleware(app, list, middlewareConf){
_.foreach(middlewareName => {
app.use(middlewareConf[middlewareName])
})
}
function bootMiddleware(app){
let env = process.env.NODE_ENV || 'dev';
var middlewareConf = require('./config/middleware')
if(env==='dev') {
loadMiddleware(app, dev_middleware, middlewareConf)
} else {
loadMiddleware(app, prod_middleware, middlewareConf)
}
}
export bootMiddleware
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句