req.on('end fired but not req.on('data



我的Nodejsreq.on('data')没有触发,但req.on('end')工作。我正在学习Nodejs,我不知道如何解决它。

我的Nodejs文件:

let routes = {
'GET': {
'/': (req,res) => {
fs.readFile('./public/index.html', (err, html) => {
if(err) throw err;
res.writeHead(200, {'Content-type': 'text/html'});
res.write(html);
res.end();
});
}
},
'POST': {
'/api/login': (req, res) => {
let body = '';
req.on('data', data => {
console.log('req data fired!');
body += data;
});
req.on('end', () => {
console.log('req end fired!')
res.end();
})
}
}
}
function router(req, res) {
let baseURL = url.parse(req.url, true);
let resolveRoute = routes[req.method][baseURL.pathname];
if(resolveRoute != undefined) {
resolveRoute(req, res);
}
}

http.createServer(router).listen(3000, () => console.log('Server running in port 3000')); 

如何修复req.on('data')触发?

如果data事件没有触发,但end事件触发了,这是因为 POST 请求中没有实际的正文数据。

使用您的确切代码,我可以重现您描述的唯一方法是当 POST 正文为空并且那里没有数据可供读取时。 例如,如果您在浏览器中提交表单,并且表单中没有具有name属性的元素,则不会随请求一起发送任何数据。

一旦我确定 POST 请求中有一些数据,data事件就会触发,它会显示一个包含数据的缓冲区。

最新更新