Ajax 板


LINE

各位先進大家好, 抱歉標題下的可能不太好,(不知道怎麼描述比較好...) 我的現在想要利用node.js做為server端語言做到以下 1.接收用戶的 http request(單元測試OK) 2.分析 method post的參數資料(單元測試OK) 3.承2,將資料送往其他web service(假設此service叫做 service1 好了,單元測試OK) 4.接收service1 回傳的資料再送給用戶(單元測試OK) 但是當我打算把以上4個過程都組合一起的時候, 因為node.js是以event driven的方式處理, 所以就會有點流程上連貫不起來的問題@@ ...抱歉我還不是很熟練這樣的開發方式 主要是當送出資料給其他web service的時候,(呼叫httprequestToOtherServer method) 就不會回來原來的流程, 所以我的作法是就在原本的webservice,建立一個event, 當httprequestToOtherServer這個method向service1 取得資料後, 就會呼叫這個event(定義為GetReturnData),將結果回傳給用戶。 基本上這個流程有取回資料沒錯, 可是不知為何, 當我多重複送幾次資料, 事件GetReturnData卻會被重複的觸發, 送第一次要求 ->觸發1次 再送一次要求 ->觸發2次 再送一次要求 ->觸發3次... 不知道什麼地方寫得不好, 或是有更好的開發此web Service方式?? 麻煩各位先進指導一下, 感謝 以下是部分的code, var event = require( './modules/event' ); var http = require('http'); var url = require('url'); var querystring = require("querystring"); var BASE_URL = "測試用IP"; // Configure our HTTP server to respond with Hello World to all requests. function WebService(){ var server = http.createServer(function (request, response) { var inputPath= request.url; var queryData = url.parse(inputPath, true).query; var path = url.parse(inputPath, true).pathname; var postData = "";//post 取得的資料 var username=""; var email=""; //自訂event作為回傳訊息使用 event.on( 'GetReturnData', function(arg1){ console.log("arg1= "+arg1); response.writeHead(200, {"Content-Type": "text/plain"}); response.end(arg1); }); if(path=="/Sign"){ if(request.method=="POST"){ //逐步取得資料 request.setEncoding("utf-8"); request.addListener("data", function (postDataChunk) { postData += postDataChunk; }); //取得所有的資料 request.addListener("end", function () { //解析取得資料 var objectPostData = querystring.parse(postData); //產生另外一個http呼叫 httprequestToOtherServer("123"); }); }else{ response.end("NO DEFINE METHOD"); } } }).listen(8888,BASE_URL); } //啟動web service WebService(); //另外一個web service var httprequestToOtherServer = function(parameter){ var data = querystring.stringify({ t1:parameter, }); var options = { host: 另一個web service的IP, port: 80, path: '/test', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var req = http.request(options, function(res) { res.setEncoding('utf8'); //取得另一個WEB SERVICE的回傳值 res.on('data', function (chunk) { //觸發自訂回傳事件 console.log("處發事件GetReturn"); if(!event.emit('GetReturnData',chunk)){ console.log("觸發GetReturnData失敗"); } }); }); req.on('error', function(e) { console.log('problem with request: ' + e.message); }); req.write(data); req.end(); }; -- --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.231.13.210
※ 文章網址: http://webptt.com/m.aspx?n=bbs/Ajax/M.1415107085.A.293.html
1F:→ mmis1000: 你沒發現,每跑一次,event上的listener就多了一個嗎? 11/05 01:13
2F:→ mmis1000: 而且,全部request共用一個channal會有問題吧? 11/05 01:14
3F:→ mmis1000: 這樣哪知道request是哪個client要的? 11/05 01:15
4F:→ mmis1000: nodejs是single instance的語言歐?用php的做法穩炸掉 11/05 01:17







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP