在node.js中,当使用Expressjs指向页面时,中间件被调用了多少次?

时间:2016-06-30 18:48:31

标签: javascript node.js express middleware

您好我对Express.js应用中如何调用中间件有疑问? 基本上我的代码如下:



// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.set('port', port);


// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public/img', 'favicon.ico')));
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('/frontend', express.static(path.join(__dirname,'frontend')));
app.use(function(req,res,next){
  console.log('every request?!?!');
  res.header('Access-Control-Allow-Origin','*');
  res.header('Access-Control-Allow-Methods','GET,PUT,POST,DELETE');
  res.header('Access-Control-Allow-Headers','Content-Type, Authorization');
  next();
});


app.use('/', routes);
app.use('/api',api);
app.use('/socket', socket);




注意我有console.log('每个请求?')来检查调用标头设置功能的时间。比我在我的控制台中得到这个:

every request?!?!
GET /app 304 2.261 ms - -
GET /frontend/css/myAppStyle.css 304 0.674 ms - -
GET /frontend/app/myApp.js 304 1.203 ms - -
GET /frontend/app/services/service.js 304 1.569 ms - -
GET /frontend/app/controllers/ctrls.js 304 2.155 ms - -
GET /frontend/app/directives/directives.js 304 1.560 ms - -
GET /frontend/img/profile.JPG 304 1.438 ms - -
every request?!?!
every request?!?!
GET /api/newcustomers 304 3.044 ms - -
GET /api/newpurchase 304 2.581 ms - -
GET /frontend/app/views/home.html 304 1.854 ms - -
every request?!?!
every request?!?!
GET /api/customerdata 304 1.206 ms - -
GET /api/newcustomers 304 1.055 ms - -
every request?!?!
GET /api/newpurchase 304 0.886 ms - -

它只是一个登录功能,基本上检查用户是否存在,然后直接到/ app,

我的问题:为什么标题设置功能被调用这么多次?如何控制应该使用中间件的次数?感谢

1 个答案:

答案 0 :(得分:0)

如果中间件内提供的URL与请求的URL匹配,则会在每个请求上调用Expressjs中间件。

如果在中间件上没有作为第一个参数传递的url,则会在每个请求上调用它。

app.use('/some-route', someMiddlewareFunc)

如果您将以下列方式编写中间件,则仅针对匹配" / some-route"

的路由调用它

如果您需要处理所有路由或特定模式的请求,则中间件非常有用。即认证,记录,解析等。