2010-11-08 23 views
5

कनेक्ट करें मैंने अभी node.js. सीखना शुरू कर दिया है। मैं निम्नलिखित (सर्वर) नमूना है:node.js + 404 त्रुटि


var app = require("express").createServer(); 
app.listen(80); 

function fail(req, res, next) { setTimeout(next, 10); } 
function success() { 
    return function(req, res, next) { setTimeout(next, 10); }; 
} 
app.get("/success0", success(), function(req, res, next) { res.send("0"); }); 
app.get("/success1", success(), function(req, res, next) { res.send("1"); }); 
app.get("/fail0", fail, function(req, res, next) { res.send("0"); }); 
app.get("/fail1", fail, function(req, res, next) { res.send("1"); }); 

अगर मैं/fail0 और/fail1 एक साथ कहते हैं, उनमें से एक सफल होगा और अन्य एक 404 त्रुटि के साथ विफल रहता है। कॉलिंग/सफलता 0 और सफलता 1 हालांकि काम करता है। क्या कोई मुझे बता सकता है कि कोई काम क्यों करता है और दूसरा नहीं करता?


var http = require("http"); 
var sys = require("sys"); 

for(var i = 0; i < 10; i++) { 
    var io = http.createClient(80, "localhost"); 
    var request = io.request("GET", "/fail" + (i%2), {host:"localhost"}); 
    request.on("response", function(response) { 
     var body = ""; 
     response.on("data", function(data) { body += data; }); 
     response.on("end", function() { 
      sys.puts(response.statusCode + ":" + body); 
     }); 
    }).end(); 
} 

ग्राहक रिटर्न ऊपर चल रहा है:

 
404:Cannot GET /fail0 
200:1 
404:Cannot GET /fail0 
200:1 
404:Cannot GET /fail0 
200:1 
404:Cannot GET /fail0 
200:1 
404:Cannot GET /fail0 
200:1 
+1

दिलचस्प समस्या। मैं इसे यहां पुन: पेश कर सकता हूं लेकिन मुझे यकीन नहीं है कि इसे कैसे ठीक किया जाए। ऐसा लगता है कि 'असफल' के पुन: उपयोग पर निर्भर है। यदि आप दो विफलताओं 'विफल'' और' विफल 1 'में' विफल 'क्लोन करते हैं तो यह ठीक काम करता है। एक्सप्रेस या कनेक्ट राउटर या मिडलवेयर तर्क के साथ कुछ करना चाहिए, लेकिन मैं यह नहीं देख सकता कि यह क्या है। – RandomEtc

उत्तर

1

यहाँ इस बग का एक विवरण (और एक सूचक के लिए एक ठीक नीचे इस प्रकार) है नीचे मेरी परीक्षण ग्राहक है।

कारण यह है कि कनेक्ट लाइब्रेरी का रूटिंग लॉजिक फ़ंक्शन कॉलबैक में एक संपत्ति के रूप में राज्य (वर्तमान मार्ग की अनुक्रमणिका) संग्रहीत करता है। आपके परीक्षण मामले में, जब कॉलबैक दूसरे मार्ग के लिए पंजीकृत होता है, '/ fail1', यह '/ fail0' के लिए मार्ग द्वारा निर्धारित राज्य को ओवरराइड करता है। इसलिए विफल 0 के लिए आने वाला अनुरोध विफल रहता है।

यह बग this thread में एक्सप्रेस मेलिंग सूची पर रिपोर्ट किया गया था।

this fork में एक फिक्स किया गया था।

संबंधित मुद्दे