2011-05-04 17 views
7

क्या Node.js के लिए समकक्ष मॉड्यूल है जो अपाचे के mod_rewrite करता है? या क्या एक मानक भाषा निर्माण है जो समकक्ष कार्यक्षमता प्रदान करता है?apache mod_rewrite node.js के बराबर बराबर है?

मैं अभी नोड के साथ शुरुआत कर रहा हूं और अपने सर्वर को इस मंच पर रूपांतरित करना चाहता हूं।

उत्तर

2

जैसा कि पिछले उत्तरों द्वारा सुझाए गए अनुसार आपको इसे स्वयं लिखना होगा; दो पिछले उत्तर विशेष रूप से अलग-अलग पथों को संभालने की दिशा में अधिक उन्मुख थे।

आपको मेरे node reverse proxy सहायक मिल सकते हैं, क्योंकि इसमें रीराइट नियमों को संभालने के लिए बहुत सारे कोड हैं। यह पिछले उत्तरों से अलग है क्योंकि यह आपको "/ people/([az] *)" जैसे नियम पर मिलान करने की अनुमति देता है और "/cgi-bin/index.cgi?user=$1" पर रीडायरेक्ट करता है जो बहुत समान है mod_rewrite करने के लिए।

+0

+1 यह नियमित अभिव्यक्तियों के उपयोग के बराबर एक mod_rewrite के बराबर है। धन्यवाद, स्टीव, मैं इसे आज़माउंगा। – ampersand

+0

यह एनपीएम पर है/क्या यह होगा? मुझे एनपीएम का उपयोग करना आसान लगता है। इसके अलावा अगर मैं कुछ नोड.जेएस होस्टिंग प्रदाताओं का उपयोग करना चाहता हूं जो निर्भरताओं को हल करने के लिए एनपीएम का उपयोग करते हैं, तो मैं इसका उपयोग नहीं कर सकता। मैं इसे अपने कोड में फिर से पैकेज नहीं करना चाहता हूं। – ampersand

+0

मुझे एनपीएम नहीं माना जाएगा - अधिकांशतः क्योंकि इसे पुस्तकालय के बजाय "स्क्रिप्ट" या "बाइनरी" के रूप में डिज़ाइन किया गया है। लेकिन अगर अन्य लोगों से रूचि हो तो वह बदल सकता है! –

3

यदि आपके पास नोडजेएस के साथ चल रहा एक HTTP सर्वर है तो आपके पास 2 ऑब्जेक्ट्स, अनुरोध और प्रतिक्रिया है। अनुरोध में अनुरोध किया गया यूआरएल है। एक आवश्यकता ('url') का उपयोग करके आप इस अनुरोधित यूआरएल को पार्स कर सकते हैं और उदाहरण के लिए अनुरोध किया गया पथनाम प्राप्त करें।

इसके बाद आप इसके साथ क्या करते हैं, यह स्पष्ट रूप से आपके स्वयं के कोड पर है।

var http = require('http'); 
http.createServer(function (req, res) { 
    var requestedURL = require('url').parse(req.url); 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.write("You requested " + requestedURL.pathname + "\n"); 
    res.end('Hello World\n'); 
}).listen(1337, "127.0.0.1"); 

जो तुम http://127.0.0.1:1337/foo/bar साथ परीक्षण कर सकते हैं: तो www.nodejs.org आप कुछ इस तरह पहुंचते हैं पर डिफ़ॉल्ट उदाहरण के आधार पर। आप requestedURL.pathname का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि आप क्या करना चाहते हैं, आदर्श रूप से आप अपना स्वयं का निर्माण करेंगे - या किसी तृतीय पक्ष - रूटिंग लाइब्रेरी का उपयोग करें। वे उपलब्ध हैं, एक्सप्रेसजेएस एक सुंदर प्रसिद्ध नोडजेएस फ्रेमवर्क है जो आपके लिए बहुत सारी चीजों का ख्याल रखने में मदद कर सकता है, लेकिन मुझे इसके साथ कोई अनुभव नहीं है।

अधिक जानकारी:

+0

किसी को भी क्यों मेरा उत्तर -1'd कर दिया गया है व्याख्या कर सकते हैं होने के लिए? इसके साथ गलत क्या है? .. – CharlesLeaf

+0

+1 धन्यवाद चार्ल्सलीफ, यह काफी कम स्तर वाला है लेकिन बहुत उपयोगी है – ampersand

+0

मुझे संदेह है क्योंकि यह सवाल का प्राकृतिक जवाब नहीं है - लेकिन मैं अभी भी कहूंगा कि यह उपयोगी प्रतिक्रिया है। –

0

आप एक बराबर की तलाश में हैं कर रहे हैं (हालांकि नहीं तकनीकी रूप से, क्योंकि रूटर वास्तव में नहीं "को फिर से लिखने" है कुछ भी), वहां कई राउटर हैं। सबसे विशेष रूप से कनेक्ट रूटर (जिस पर एक्सप्रेस बनाया गया है): https://github.com/senchalabs/connect

वह कुछ इस तरह दिखेगा:

app.get('/', function(req, res) { 
    res.end('hello, here is the home page.'); 
}); 

यह निचले स्तर http इंटरफ़ेस पहले के साथ चारों ओर गंदगी के लिए बेहतर हो सकता है, हालांकि, करने के लिए इसके लिए एक अच्छा अनुभव प्राप्त करें।

0

पर एक रेराइट मॉड्यूल देखना चाहते हैं। और जब मिडलवेयर में किसी अन्य प्रॉक्सी मॉड्यूल के साथ प्रयोग किया जाता है, तो वे एक रिवर्स प्रॉक्सी के रूप में मिलकर काम करते हैं।

मैं उन्हें इस्तेमाल अपने स्थानीय बॉक्स में एकल पृष्ठ अनुप्रयोगों के विकास, जबकि (तो मैं न कॉन्फिगर करना अपाचे/nginx स्थानीय स्तर पर)

इस आदेश CORS से बचने और (जे एस/सीएसएस/छवियों को छोड़कर) सभी पृष्ठों भेजने के लिए काम करने के लिए एसपीए के लिए index.html करने के लिए।

var connect = require('connect'); 
var modRewrite = require('connect-modrewrite'); 
var proxy = require('proxy-middleware'); 
var url = require('url'); 


var app = connect() 
    .use(modRewrite([ 
    "^\/api\/(.*)  /send-to-api/api/$1 [L]", 
    "^(.*)\/css\/(.*) /send-to-ui/css/$2  [L]", 
    "^(.*)\/js\/(.*)  /send-to-ui/js/$2  [L]", 
    "^(.*)\/images\/(.*) /send-to-ui/images/$2 [L]", 
    "^(.*)\/fonts\/(.*) /send-to-ui/fonts/$2 [L]", 
    "^(.*)    /send-to-ui/index.html [L]" 
    ])) 
    .use('/send-to-api', proxy(url.parse('http://api.server.dev/'))) // Don't forget the last backslash 
    .use('/send-to-ui', proxy(url.parse('http://ui.server.dev/'))) // Don't forget the last backslash 
    .listen(9000) 

चेक कि मैं [L] झंडा उपयोग करें, क्योंकि मैं इसे फिर से लिखने और नियमों के बाकी छोड़ना चाहते।

इस मामले में, केवल /api यूआरएल api.server.dev पर प्रक्षेपित हो जाते हैं, बाकी ui.server.dev पर जाते हैं। यूआरएल उपसर्ग /send-to-api और /send-to-ui अस्थायी हैं और मैं उन्हें अलग-अलग करने के लिए उपयोग करता हूं, जहां इसे connect द्वारा उनके संबंधित सर्वर पर भेजने से पहले हटा दिया जाता है।

और हाँ, रीडायरेक्ट के मामले में, proxy-middleware बदल जाएगा Location हैडर localhost:9000

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