跳到主要内容
CNode

app.use中间件的过滤问题

问答
HHuKaihe发布于 10 年前最后回复 10 年前
342060

学习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)

F
flamingtop#310 年前

文档里说得很清楚

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

  • application level middleware
  • router level middleware
  • ...
L
lijsh#210 年前

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

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

Z
zengming00#110 年前

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

参与回复

登录后即可参与回复。登录