2013-09-29 24 views
11

Ben url takma adları işlemek için ara katman yapmaya çalışıyorum kullanarak expressjs içinde yönlendirme: Ben istenen url için bir mağazada arıyorumne şu anda yapıyorum olduğunu ortakatmanını

// [...] 
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(); 
    }; 

}; 

Yani temelde ve takma ad olarak bulunursa, request.url ifadesini bu adın kaynak yoluna değiştiririm, böylece ifade doğru yolu arar.

Sorun, request.url ve request.path aynı değere sahip, ancak request.pur değişirken request.url çalışıyor. Ayrıca agains'i test etmek zorunda olduğumdan emin değilim.

İstekler, request.url ile etkileşimde bulunduğumda çalışır, ancak yalnızca doğru şekilde yaptığımdan emin olmak istedim.

Herhangi bir düşünce?

cevap

13

req.url özelliğinin yeniden yazılması, dahili olarak yeniden yönlendirme isteklerinin doğru yoludur. Bu nedenle, orijinal URL'yi değiştiren durumlar için req.originalUrl var. ancak dahili yönlendirme amaçlı özgürce req.url yeniden yazmasına olanak orijinal istek url korur,

Bu özellik çok req.url gibidir:

Bu req.originalUrl için Ekspres belgelerine durumları budur.

req.url mülkiyet

belgelenen, ancak ifadeden bunu size izah şekilde kullanılacak anlamı var çıkarabiliriz yukarıda. Ekspres testlerinin bazılarında bu şekilde de kullanılır.

+1

Bu içindeki mini yönlendirici ifade çalışmak görünmüyor (kullanarak 'express.Router()') –

0

Tam olarak bunun için run-middleware modülünü kullanabilirsiniz. Sadece & yöntem & yöntemini kullanarak istediğiniz işleyiciyi çalıştırın. Örneğin

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(); 
    }; 

}; 
İlgili konular