Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js连接中间件限制不工作_Javascript_Node.js - Fatal编程技术网

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()