在app.use中定义的函数是否会在高负载下产生开销

时间:2014-01-27 12:40:36

标签: node.js http express

我想在 express 中找到一些像req.badRequest('some reason here')这样的功能,但我没有。我从stackoverflow回答here使用这种方法。

有一件事困扰我,我知道每次请求发生时代码app.use都会调用。

查看示例:

app.use(function (req, res, next) {
  console.log('I invoked');
  res.internalError = function() {
    res.statusCode = 500;
    log.error('Internal error(%d): %s', res.statusCode, 'some error');
    res.send({ error: true, description: 'Internal server error' });
  };
  res.badRequest = function(description, code) {
    res.statusCode = 400;
    res.send({ error: true, description: description, code: code});
  };
  next();
});

问题:

我不知道多个请求中的res对象会发生什么(当调用use函数时),有人可以解释一下吗?是否会导致处理请求的开销?如果是这样我怎样才能以另一种方式实现这种语法糖并且做得更好?

1 个答案:

答案 0 :(得分:1)

请参阅Modifying Express.js Request Object

您可以扩展reqres来自的原型。这是一个非常简单的例子:

var express = require('express')

express.request.badRequest = function(res,description,code) {
  res.statusCode = code;
  res.send({error:true, description: description, code: code})
}

var app = express()

app.get('/', function(req,res) {
  req.badRequest(res,'badz',400)
})

app.listen(3001)

一个区别是您必须手动将res传递给此功能。那是因为与您的示例不同,我没有中间件上下文来通过闭包访问res。这将阻止您必须生成该函数并在每次请求时分配它。

关于这是好事还是坏事,我作为练习留给读者。 ;)我发现在每个请求中为一个对象分配2个东西并不是那么多开销。