CNode

app.use中间件的过滤问题

问答
HHuKaihe发布于9 年前最后回复9 年前3 回复4189 浏览0 收藏

学习nodejs express后台有一段时间了,心里一直有一个疑问,在app.js里我们使用了很多中间件,比如:

		app.use(logger('dev'));
      app.use(bodyParser.json());
      app.use(bodyParser.urlencoded({extended: false}));
      app.use(cookieParser());
      app.use(express.static(path.join(__dirname, 'public')));
      app.use(session({
      secret: settings.cookieSecret,
      key: settings.db,//cookie name
      cookie: {maxAge: 1000 * 60 * 60 * 24 * 30},//30 days
      resave: false,
      saveUninitialized: true
      }));
   	app.use(flash());

我们知道, 像上面use里没有指定某个挂载路径,参数实际上就是一个又一个的回调函数,所有请求都会通过这些中间件函数的“过滤”。 我的疑问是:比如我的某个请求是用来向数据库中添加一条记录的,根本用不到上面的flash, cookie中间件

  1. 像上面这样写还用不用经过这些函数的过滤?
  2. 如果需要,那么岂不是多此一举,会造成性能损耗吗?
  3. 有什么办法能够防止性能损耗?
查看回复

回复 (3)

Z
zengming00#1·9 年前

一般人我不告诉他 app.get('/hehe', func1, func2 ,func3)

L
lijsh#2·9 年前

经过肯定都会经过,但中间件里面会有自己的判断逻辑,符合一定条件才会进行处理,不处理就直接next 了。

这个性能损耗几乎可以忽略不计了,如果实在担心,那就看你怎么组合中间件呗,针对特定路由启用就好,别写在全局。

F
flamingtop#3·9 年前

文档里说得很清楚

http://expressjs.com/en/guide/using-middleware.html

  • application level middleware
  • router level middleware
  • ...
参与回复
登录后即可参与回复。登录