Node.js请求数据事件未触发.我做错了什么?
Node.js request data event not firing. What am I doing wrong?
似乎请求对象上的数据事件没有触发,或者我无法将其连接起来以便从中获取任何内容。我得到的结束事件很好,所有的url都在工作。我看了论坛和文档,当我看我的代码,它似乎应该工作。我正在使用Node版本0.10.12。
我是新来的。我试图得到一个简单的服务器去节点。我一直在看Node初学者的书。大部分代码都来自于此,只做了一些非常小的修改。我已经从书中直接试过代码了。这是我现在正在使用的代码。
index.js
var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");
var handle = {};
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
if (process.argv[2] !== undefined && process.argv[2] !== null) {
server.start(router.route, handle, process.argv[2]);
} else {
server.start(router.route, handle);
}
router.js
route = function(handle, pathname, response, postData) {
if (typeof handle[pathname] === "function") {
handle[pathname](response, postData);
} else {
response.writeHead(404, {"Content-Type": "text/plain"});
response.end("404 Not found");
}
}
exports.route = route;
server.js
var http = require('http');
var url = require('url');
var portToUse = 8888;
start = function(route, handle, port) {
if (port !== undefined && port !== null && typeof parseInt(port) === 'number' && port > 1000 && port < 10000) {
console.log('You passed in the port number %d.', port);
portToUse = port;
}
http.createServer(function(request, response) {
var postData = '';
var pathname = url.parse(request.url).pathname;
console.log('Request for %s received.', pathname);
route(handle, pathname, response);
request.setEncoding('utf8');
// I have tried both .on and .addListener
request.on('data', function(postDataChunk) {
postData += postDataChunk;
console.log('Received POST data chunk %s.', postData);
});
request.on('end', function(postDataChunk) {
console.log(postDataChunk);
route(handle, pathname, response, postData);
});
}).listen(portToUse);
console.log('The server listening on %d.', portToUse);
}
exports.start = start;
requestHandlers.js
var exec = require('child_process').exec;
start = function(response, postData) {
var body = '<!doctype html>' +
'<html lang="en">' +
'<head>' +
'<meta charset="UTF-8">' +
'<title>Upload Server</title>' +
'</head>' +
'<body>' +
'<form action="/upload">' +
'<textarea name="text" id="text-area" cols="40" rows="20"></textarea>' +
'<input type="submit" value="Submit text">' +
'</form>' +
'</body>' +
'</html>';
response.writeHead(200, {"Content-Type": "text/html"});
response.end(body);
}
upload = function(response, postData) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('You''ve sent: ' + postData);
}
exports.start = start;
exports.upload = upload;
您需要在调用route
之前添加data
侦听器。原因是,在你的处理器中,你调用的是response.end
。当您执行此操作时,node将检查套接字上是否有任何数据侦听器,如果没有,它将转储现有的请求数据,因为它认为不再需要这些数据。
相关文章:
- 正在尝试为Docpad网站设置Lunr全文搜索插件.我做错了什么
- 重新加载重复数据失败,我做错了什么
- 我做错了什么
- Google Apps 脚本为 getLastRow 抛出电子邮件失败通知,我做错了什么
- Javascript语法 - 我做错了什么
- 角度灯箱不起作用.我做错了什么
- 在这个猫鼬独特的保存前验证中,我做错了什么
- 简单的Youtube iframe API就在文档中,我做错了什么
- 我正在尝试实现一个AJAX调用.我做错了什么
- 我对这个动态查询做错了什么
- 我在jQuery事件处理和隐藏/显示图像元素方面做错了什么
- 闭包中的本地变量从外部更改.这是一个javascript错误,或者我做错了什么
- JS离线检测?我做错了什么
- Jquery自动完成不是't工作.我做错了什么
- 是ngRouter的角度错误还是我做错了什么
- jQuery Toggle——我做错了什么
- javascript原型,我做错了什么
- 超级初学者JavaScript..我做错了什么
- 我在这里做错了什么?否则,如果
- Javascript和HTML - 添加一个下拉菜单,我在这里做错了什么