app.use中间件的过滤问题
发布于 7 年前 作者 HuKaihe 3493 次浏览 来自 问答

学习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 回复

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

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

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

文档里说得很清楚

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

  • application level middleware
  • router level middleware
回到顶部