首页 > 解决方案 > req.on('结束触发但未触发 req.on('数据

问题描述

我的Nodejs req.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')触发问题?

标签: node.js

解决方案


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

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

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


推荐阅读