app.use中间件的过滤问题
学习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中间件
- 像上面这样写还用不用经过这些函数的过滤?
- 如果需要,那么岂不是多此一举,会造成性能损耗吗?
- 有什么办法能够防止性能损耗?
3 回复
一般人我不告诉他 app.get(’/hehe’, func1, func2 ,func3)
经过肯定都会经过,但中间件里面会有自己的判断逻辑,符合一定条件才会进行处理,不处理就直接next 了。
这个性能损耗几乎可以忽略不计了,如果实在担心,那就看你怎么组合中间件呗,针对特定路由启用就好,别写在全局。
文档里说得很清楚
http://expressjs.com/en/guide/using-middleware.html
- application level middleware
- router level middleware
- …