2013-09-29 11 views
11

मैं यूआरएल उपनाम निपटने के लिए एक मध्यस्थ बनाने के लिए कोशिश कर रहा हूँ का उपयोग कर expressjs में रीडायरेक्ट करने, क्या मैं अभी कर रहा हूँ है:अनुप्रयोग में मिडलवेयर

// [...] 
module.exports = function() { 

    return function(req, res, next) { 
    // getAlias would get an object {alias:"alias/path",source:"/real/path"} or null 
    var alias = getAlias(req.url); 
    if(alias) { 
     req.url = alias.source; 
    } 
    next(); 
    }; 

}; 

तो मूल रूप से मैं अनुरोध किया गया URL के लिए एक दुकान में देख रहा हूँ और अगर यह उपनाम के रूप में पाया जाता है तो मैं उस उपनाम के स्रोत पथ पर request.url बदलता हूं ताकि एक्सप्रेस सही मार्ग पर कॉल कर सके।

समस्या request.url है और request.path का एक ही मान है, लेकिन request.pur का काम करते हुए request.path बदलना काम नहीं करता है। इसके अलावा मुझे यकीन नहीं है कि मुझे फिर से परीक्षण करना होगा।

जब मैं request.url से बातचीत करता हूं तो काम करता है लेकिन बस यह सुनिश्चित करना चाहता था कि मैं इसे उचित तरीके से कर रहा हूं।

कोई विचार?

उत्तर

13

req.url संपत्ति को पुनर्निर्मित करना आंतरिक रूप से अनुरोधों को दोबारा शुरू करने का सही तरीका है। यही कारण है कि उन मामलों के लिए req.originalUrl है जहां कोई मूल URL बदलता है। लेकिन यह मूल अनुरोध यूआरएल को बरकरार रखे हुए है, तो आप आंतरिक मार्ग प्रयोजनों के लिए स्वतंत्र रूप से req.url के पुनर्लेखन के लिए अनुमति देता है,

यह गुण बहुत req.url की तरह है:

यह वही है req.originalUrl के लिए एक्सप्रेस प्रलेखन राज्यों है।

req.url संपत्ति दर्ज नहीं किया है, लेकिन बयान से ऊपर आप अनुमान लगा सकते हैं जिस तरह से आप के बारे में बताया में इस्तेमाल किया जा करने के लिए होती है। इसका कुछ एक्सप्रेस परीक्षणों में भी इस तरह प्रयोग किया जाता है।

+1

इस से काम करने के लिए अंदर मिनी रूटर व्यक्त प्रतीत नहीं होता है (का उपयोग करते हुए 'express.Router()') –

0

आप इसके लिए run-middleware मॉड्यूल का उपयोग कर सकते हैं। URL & विधि & डेटा का उपयोग करके बस इच्छित हैंडलर चलाएं।

https://www.npmjs.com/package/run-middleware

उदाहरण के लिए:

module.exports = function() { 

    return function(req, res, next) { 
    // getAlias would get an object {alias:"alias/path",source:"/real/path"} or null 
    var alias = getAlias(req.url); 
    if(alias) { 
     res.runMiddleware(alias,(status,data)=>(res.status(status).send(data)) 
    } 
    next(); 
    }; 

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