write after end --nodejs 之response

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值