Javascript Node.js连接中间件限制不工作
我有个问题 服务器: 客户:Javascript Node.js连接中间件限制不工作,javascript,node.js,Javascript,Node.js,我有个问题 服务器: 客户: var http = require('http'); var req = http.request({ method: 'POST', port: 3000, headers: { 'Content-Type': 'application/json' } }); req.write('['); var n = 30000000; while (n--) { req.write('"foo",'); } req.write('"bar"]'); req.
var http = require('http');
var req = http.request({
method: 'POST',
port: 3000,
headers: {
'Content-Type': 'application/json'
}
});
req.write('[');
var n = 30000000;
while (n--) {
req.write('"foo",');
}
req.write('"bar"]');
req.end();
Connect的中间件限制而不是“限制”json的大小。我知道它将被弃用,但是Express framework我可以使用什么来限制请求的大小?限制中间件只检查请求消息的头
内容长度
,而HTTP POST请求中没有这样的头
您可以通过以下方式进行验证:
var app = connect()
.use(connect.limit('32kb'))
.use(connect.urlencoded())
.use(connect.json())
.use(function(req, res){
console.log(req.headers);
console.log('yo');
res.end('hello\n');
});
您可以通过以下代码测试限制
中间:
var http = require('http');
var req = http.request({
method: 'POST',
port: 3000,
headers: {
'Content-Type': 'application/json',
'Content-Length': 40 * 1024
}
});
顺便说一句:您可以检查limit
中间件的测试方法:改为:
.use(connect.urlencoded({
limit: '32kb'
}))
.use(connect.json({
limit: '32kb'
}))
或者只是:
.use(connect.bodyParser({
limit: '32kb'
})
您仍然可以写入req
,但这并不一定意味着服务器将接收这些字节。如果您检查响应,并且它不是4xx错误,那么它就是一个bug
编辑:
好啊但是,我没有收到任何关于错误或警告消息的日志,为什么?看起来什么都没发生!您应该会从服务器控制台中获得类似于connect.limit()的警告,该警告将在connect 3.0中删除。但是错误只由状态代码表示,没有任何消息。我明白了。我的意思是我的“客户机-服务器”仍在向服务器发送带有json的请求!那么需要什么中间件控制台.limit呢?我认为如果它能工作,那么一定会有什么事情发生,但我什么也看不到。中间件“限制”只检查头条目“内容长度”头,而根本不检查消息正文。您知道,通常,像希望初始化这样的请求是非法的,因为头条目“Content Length”对于POST请求是必需的,并且应该在任何数据传输之前发送。所以你应该发送合法的POST请求来验证你的预期行为。你能给我举个例子吗。我理解您的解释,但我不理解如何在节点的客户端服务器实例上读取服务器的响应。我不理解必须在何处插入此代码,抱歉。终端的输出“this.parent=new SlowBuffer(this.length);assert未定义”等等…@user2972298此答案中的代码确实限制了消息正文的大小。您可以像
var app=connect()一样将代码插入代码中。使用(connect.limit('32kb'))。使用(connect.urlencoded({limit:'32kb'))。使用(connect.json({limit:'32kb'))代码>为什么在解析器中指定限制更好?
.use(connect.bodyParser({
limit: '32kb'
})
req.once('response', function (res) {
assert.equal(res.statusCode, 413)
})
.write(new Buffer(123123123213223122))
.end()