index.js
var server=require("./server");
var route=require("./route");
var requestHandlers=require("./requestHanders");
var handle={};
handle["/"]=requestHandlers.start;
handle['/start']=requestHandlers.start;
handle["/upload"]=requestHandlers.upload;
server.start(route.route,handle);
server.js
var http =require("http");
var url=require("url");
function start(route,handle){
var onRequest=function(request,response){
var postData="";
var pathname=url.parse(request.url).pathname;
console.log("request for "+pathname+" have received");
request.setEncoding("utf-8");
request.addListener("data",function(postDataChunk){
postData += postDataChunk;
console.log("receive POST data chunk '"+ postDataChunk + "'.");
})
request.addListener("end",function(){
console.log(postData);
route(handle,pathname,response,postData);
})
route(handle,pathname,response);
}
http.createServer(onRequest).listen(3000);
console.log("Server has started");
}
module.exports.start=start;
route.js
function route(handle,pathname,response,postData){
console.log("about to route a request for"+ pathname);
if(typeof handle[pathname]=='function'){
console.log("route--"+postData);
handle[pathname](response,postData);
}else{
console.log("No request handler found for "+ pathname);
response.writeHead(404,{"Content-Type":"text/plain"});
response.write("404 not found");
response.end();
}
}
module.exports.route=route;
requestHandles.js
var exec = require("child_process").exec;
var querystring=require("querystring");
function start(response,postData) {
console.log("request handler 'start' was called");
var body='<html>'+
'<head>'+
'<meta http-equive="Content-Type" content="text/html";'+
'charset=UTF-8" />'+
'</head>'+
'<body>'+
'<form action="/upload" method="post">'+
'<textarea name="text" rows="20" cols="60" ></textarea>'+
'<input type="submit" value="Submit text" />' +
'</form>'+
'</body>'+
'</html>';
response.writeHead(200,{ "Content-Type": "text/html"});
response.end(body);
}
function upload(response,postData){
console.log("request handler 'upload' was called");
console.log("handle-upload"+ postData);
response.writeHead(200, {
"Content-Type": "text/plain"
});
var message="you have sent text "+ querystring.parse(postData).text;
console.log(message);
response.write(message);
response.end();
}
module.exports.start=start;
module.exports.upload=upload;
浏览器中首先访问http://127.0.0.1:3000/start;
出现textarea输入,输入12334534523,点击提交
到http://127.0.0.1:3000/upload
正常应该返回,you have sent text 12334534523,
但是却返回you have sent text undefined
并且控制台中出现如下错误
events.js:183
throw er; // Unhandled 'error' event
^
Error: write after end
at write_ (_http_outgoing.js:625:15)
at ServerResponse.write (_http_outgoing.js:620:10)
at Object.upload [as /upload] (D:\study\js\study01\requestHanders.js:30:14)
at route (D:\study\js\study01\route.js:5:24)
at IncomingMessage.<anonymous> (D:\study\js\study01\server.js:17:13)
at emitNone (events.js:106:13)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1056:12)
at _combinedTickCallback (internal/process/next_tick.js:138:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
D:\study\js\study01>
求解?Any help with this would be amazing. The few sparse answers I’ve found online don’t help at all.