用http模块访问后端失败,求解原因
发布于 10 年前 作者 MephistoMMM 3700 次浏览 最后一次编辑是 8 年前 来自 问答

这是用来访问的代码:

var http = require('http');
var req = http.request({
    method: 'POST',
    port: 3000,
    headers: {
         'Content-Type': 'application/json'
    }
},function(res){
    console.log(res);
});

req.write('{"foo":"');
var n=300000;

while (n--){
    req.write('foo,');
}

req.end('bar"}');
console.log("over");

下面是后端代码:

var connect = require('connect');
var bodyParser =require("body-parser");
var app = connect();

app.use(function(res,req,next){
    console.log("start");
    next();
});
app.use(bodyParser());
app.use(function(req,res){
    console.log(req.body.foo);
    res.end("ok\n");
}).listen(3000);

都运行后,结果什么事情都没发生

1 回复

300000 个 foo 阻塞住了。这个字符串的大小大约有1G了,因为是 JSON 格式,body parser 会等到全部发完才开始解析的,除非电脑配置特别好,中间卡住不奇怪。

另外 connect 和 body-parser 现在的正确用法请参照 github 文档上的例子(connectbody-parser),比如创建 server 应该 http.createServer(app).listen(3000),用body parser 解析 JSON 应该app.use(bodyParser.json())

回到顶部