为 app.use 在数组中分组 express 中间件

李俊亨
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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js Express中间件:app.param vs app.use

来自分类Dev

Node.js Express中间件:app.param vs app.use

来自分类Dev

Express.js“ app.use()需要中间件功能”

来自分类Dev

为什么 Express 中间件在 app.use(express.static(path.join(...))) 之前不触发;

来自分类Dev

Express Router.use在中间件中的使用

来自分类Dev

如何修复中间件功能错误app.use

来自分类Dev

类型错误:app.use()需要中间件

来自分类Dev

将中间件与express()。use一起使用express.static

来自分类Dev

Express:将中间件抽象为应用程序使用

来自分类Dev

将Nest.js应用程序导入为简单的Express中间件

来自分类Dev

将路由和中间件分离为文件(在Express.js中)

来自分类Dev

express.js app.post中间件未触发

来自分类Dev

Express app.get中间件不起作用`SyntaxError:输入意外结束`

来自分类Dev

可以通过 Express 中的中间件添加“app”方法吗?

来自分类Dev

为什么app.use()中的中间件未执行

来自分类Dev

在每个文件中快速设置app.use中间件?

来自分类Dev

抛出新的TypeError('app.use()需要中间件功能');

来自分类Dev

throw new TypeError('app.use() 需要中间件函数');

来自分类Dev

错误:TypeError('app.use() 需要一个中间件函数

来自分类Dev

在Koa中使用Express中间件

来自分类Dev

Express 4中的中间件顺序

来自分类Dev

Express中间件,next和Promises

来自分类Dev

Express中间件测试Mocha Chai

来自分类Dev

为什么Express不是中间件?

来自分类Dev

Express 4:中间件分支

来自分类Dev

在 express 中跳过中间件

来自分类Dev

post方法后的Express中间件

来自分类Dev

如何从路由器调用app.js中的Express 4.0中间件功能?

来自分类Dev

Nodejs/express - Router.use() 需要中间件功能,但得到了一个 ' + gettype(fn));

Related 相关文章

  1. 1

    Node.js Express中间件:app.param vs app.use

  2. 2

    Node.js Express中间件:app.param vs app.use

  3. 3

    Express.js“ app.use()需要中间件功能”

  4. 4

    为什么 Express 中间件在 app.use(express.static(path.join(...))) 之前不触发;

  5. 5

    Express Router.use在中间件中的使用

  6. 6

    如何修复中间件功能错误app.use

  7. 7

    类型错误:app.use()需要中间件

  8. 8

    将中间件与express()。use一起使用express.static

  9. 9

    Express:将中间件抽象为应用程序使用

  10. 10

    将Nest.js应用程序导入为简单的Express中间件

  11. 11

    将路由和中间件分离为文件(在Express.js中)

  12. 12

    express.js app.post中间件未触发

  13. 13

    Express app.get中间件不起作用`SyntaxError:输入意外结束`

  14. 14

    可以通过 Express 中的中间件添加“app”方法吗?

  15. 15

    为什么app.use()中的中间件未执行

  16. 16

    在每个文件中快速设置app.use中间件?

  17. 17

    抛出新的TypeError('app.use()需要中间件功能');

  18. 18

    throw new TypeError('app.use() 需要中间件函数');

  19. 19

    错误:TypeError('app.use() 需要一个中间件函数

  20. 20

    在Koa中使用Express中间件

  21. 21

    Express 4中的中间件顺序

  22. 22

    Express中间件,next和Promises

  23. 23

    Express中间件测试Mocha Chai

  24. 24

    为什么Express不是中间件?

  25. 25

    Express 4:中间件分支

  26. 26

    在 express 中跳过中间件

  27. 27

    post方法后的Express中间件

  28. 28

    如何从路由器调用app.js中的Express 4.0中间件功能?

  29. 29

    Nodejs/express - Router.use() 需要中间件功能,但得到了一个 ' + gettype(fn));

热门标签

归档