Node.js 对nodejs中的单个请求调用两次request.on(可读)
我是nodejs的新手,现在我正在学习http模块 我为node编写了一个js程序来检查请求中的内容类型是否为application/json,然后它应该在“readable”事件中进行控制台操作 发生的情况是:在一个调用两次的“可读”事件上,第一次打印值,第二次返回null 以下是代码:Node.js 对nodejs中的单个请求调用两次request.on(可读),node.js,connect,Node.js,Connect,我是nodejs的新手,现在我正在学习http模块 我为node编写了一个js程序来检查请求中的内容类型是否为application/json,然后它应该在“readable”事件中进行控制台操作 发生的情况是:在一个调用两次的“可读”事件上,第一次打印值,第二次返回null 以下是代码: var connect = require('connect'); function jsonParse(req, res, next) { if (req.headers['content-ty
var connect = require('connect');
function jsonParse(req, res, next) {
if (req.headers['content-type'] == 'application/json' && req.method == 'POST') {
var readData = '';
req.on('readable', function() {
console.log('inside readable ' + req.read());
readData += req.read();
});
req.on('end', function() {
try {
req.body = JSON.parse(readData);
} catch (e) {
}
next();
})
} else {
next();
}
}
connect()
.use(jsonParse)
.use(function(req, res) {
if (req.body) {
res.end('JSON parsed !' + req.body);
} else {
res.end('no json detected !');
}
}).listen(3000);
我这样称呼:
输出为:
内部可读{
“foo”:“asdf”
}
内部可读空
请指导我如何处理这件事。提前感谢。您应该仅在数据可用时读取请求,因此当
req.read()
不返回null
。您可以通过while
循环检查这一点
替换:
var readData = '';
req.on('readable', function() {
console.log('inside readable ' + req.read());
readData += req.read();
});
与:
请共享控制台这是通过控制台语句打印的结果:inside readable{“foo”:“asdf”}inside readable Null您能告诉我为什么调用了两次吗?很少有人建议浏览器再发送一次favicon图标请求。那我们怎么处理呢?你可以用它作为中间商你用快递还是什么?
var readData = '';
req.on('readable', function(){
var chunk;
while (null !== (chunk = req.read())){
readData += chunk;
}
});