Javascript 如果请求太大,如何在Express中生成返回413的中间件?
我在这里所做的似乎并没有对回应做出任何回应。奇怪的是调试记录器显示Javascript 如果请求太大,如何在Express中生成返回413的中间件?,javascript,node.js,express,Javascript,Node.js,Express,我在这里所做的似乎并没有对回应做出任何回应。奇怪的是调试记录器显示POST/ServiceName 413 2ms var maxSize = 1000*1000; module.exports = function (req, res, next) { var size = req.headers['content-length']; if(size>maxSize){ var errorMessage = "Request of size "+size+" rejec
POST/ServiceName 413 2ms
var maxSize = 1000*1000;
module.exports = function (req, res, next) {
var size = req.headers['content-length'];
if(size>maxSize){
var errorMessage = "Request of size "+size+" rejected";
res.status(413);
res.send({error:"Please do not send that it makes my server sad"});
console.error(errorMessage);
}
else{
next();
}
}
这是摩卡咖啡测试,如果它对任何人都有帮助的话,它就会死亡
it('should 413 when the request is over a meg', function(done){
var x = "1234567890";
var iterations = 14;
for (var i = 0; i < iterations; i++) {
x += x+x;
}
superagent.post('http://localhost:3000/CartItemAdd')
.send({
name: x,
item: '12354'
})
.end(function(e,res){
expect(e).to.eql(null);
expect(res.status).to.eql(413);
expect(res.body).to.be.an('object');
done(e)
})
});
it('当请求通过meg时应为413',功能(完成){
var x=“1234567890”;
var迭代次数=14次;
对于(var i=0;i
看起来这可能仅仅是您获取内容长度标题的方式
请求
有一个用于不敏感地拉出头的案例
我猜req.get('content-length')
或req.headers['content-length']
可能会起作用
此外,
size>maxSize
可能会将字符串与数字进行比较,除非express将内容长度标题转换为某个数字。这不重要,因为类型强制将在此处生效,但值得注意。express.limit中间件将为您发送413:
app.use(connect.limit('1mb'));
您可以在此处学习源代码:
如果要使用限制正文的中间件,express.limit已被弃用,可以切换到原始正文
:
$npm安装原始车身
var getRawBody = require('raw-body')
app.use(function (req, res, next) {
getRawBody(req, {
length: req.headers['content-length'],
limit: '1mb',
encoding: 'utf8'
}, function (err, string) {
if (err)
return next(err)
req.text = string
next()
})
})
自述文件:最大大小正确,但您是对的,我应该注意这一点。我的实际问题是在使用主体解析中间件之前尝试响应。下面标记的答案是对我提出的主要问题的一个很好且详细的回答。