node.js - 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')
触发问题?
解决方案
如果data
事件没有触发,但end
事件触发了,那是因为 POST 请求中没有实际的正文数据。
使用您的确切代码,我可以重现您所描述的唯一方法是当 POST 正文为空且没有数据可供读取时。例如,如果您在浏览器中提交表单并且表单中没有具有name
属性的元素,则不会随请求发送任何数据。
一旦我确定 POST 请求中有一些数据,data
事件就会触发并呈现一个包含数据的缓冲区。
推荐阅读
- android - 如何在删除之前从应用程序内部文件夹中复制文件?
- ssis - SSIS 从 csv 平面文件源中删除左零
- django - Django 设置:没有这样的表 auth_user
- reactjs - 两页相互重叠
- selenium - 如何在 Chrome 浏览器上启动 Serenity Cucumber BDD?
- laravel - docker compose image 不再工作 laravel
- javascript - 为什么 Math.toString() 返回 [object Math]?
- cassandra - Cassandra 数据聚合和汇总
- php - Laravel 5.7 身份验证问题无法访问
- mysql - MySQL Workbench 和 phpMyadmin