2016-03-26 19 views
0

onun XML yılında & izin vermez url parametreleri (req.query) güncelleştirmek etmez. İki parametreyi içeren (/path?a=123&b=hello 'gibi) url'den kaçtım ve şimdi /path?a=123%26b=hello olur ve tarayıcının otomatik olarak url'yi geri döndüreceğini düşünürdüm. Ama değil. Ve Google bot hata veriyor.değiştirme req.url Google Site yana

Bu nedenle, söz konusu rotayı çağırmadan önce yığının üstüne bir ara katman işlevi ekliyorum.

app.use(function (req, res, next) { 
     debug(req.url); 
     req.url = unescape(req.url); 
     debug(req.url); 
     // This works as expected 
     next(); 
}); 

Ama ben gerçekleştirdiğinizde req.query.a ve req.query.b (Google botu /path?a=123%26b=hello yani kaçan URL kullanarak ziyaret ediyor), o req.query.a gives 123%26b=hello ve req.query.b gives undefined yani orijinal değerini veriyor ve ben req.url kontrol yaparken olduğu tespit edilmeyen url veriyor doğru.

Önerileriniz nelerdir?

GÜNCELLEME:

(Ben bu denemedim ama işe yarayacak)

// After unescaping req.url 
// test.com/path?a=123&b=hello 
var query = req.url.split('?')[1].split('&'); 
var a = query[0].split('=')[1]; 
var b = query[1].split('=')[1]; 

// It looks very dirty 
+0

XML'de '/ yol? A = 123 & b = hello' denediniz mi? – user3173842

+0

@ user3173842 Teşekkürler. İhtiyacım olan tam temiz çözüm. Lütfen cevap kabul edip, kabul edebilmek için cevap yazınız. – dragfire

cevap

1

XML'de Zaten öğrendim olarak

/path?a=123&b=hello 

%26 bir değer içinde & işaret için kullanılır: && olarak kaçmak d.

+0

Teşekkür ederiz. Çok fazla kirli hack yazmamı engelledin. : D – dragfire

+1

Kötü görünüyorsa, muhtemelen daha iyi bir yol var;) np – user3173842

0

HTML5 History API deneyin işe yarayacak olan düşünebildiğim biri hızlı çözüm:

History.pushState()

+0

Sunucu tarafında bunu yapmanın bir yolu varsa, öncelikle bilmek isterim. Bundan sonra çözümünüzü deneyeceğim. – dragfire

+0

Sunucu tarafını kullanarak url parametrelerini de değiştirebilirsiniz, ancak kullanıcı deneyimini azaltacak sayfayı yeniden yönlendirmeniz gerektiğinden dolayı ..Cilt tarayıcısı her zaman istemci tarafında çalışır. Yani, lütfen History.pushStste() 'API'yi deneyin. –