我想在 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
函数时),有人可以解释一下吗?是否会导致处理请求的开销?如果是这样我怎样才能以另一种方式实现这种语法糖并且做得更好?
答案 0 :(得分:1)
请参阅Modifying Express.js Request Object。
您可以扩展req
和res
来自的原型。这是一个非常简单的例子:
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个东西并不是那么多开销。