2013-08-13 2 views
0

J'ai le paramètre url suivantFractionner le paramètre url node.js?

valeur échantillon valeur réelle contient tant de paramètres

var data = "browserName=MSIE&cookies=Rgn=%7CCode%3DMUMBAI%7Ctext%3DMumbai%7C; NREUM=s=1376355292394&r=220970&p=2080092;cs_uuid=209712058942163; cs_si=209712058942163.1&javascriptEnabled=true"; 

fonction suivante est utilisée pour obtenir le paramètre particulier

// Fonction générique pour obtenir notamment paramètre

getParameterValue : function(data, parameter) { 

    var value = null; 
    if (data.length > 0) { 
     var paramArray = data.split("&"); 

     for (var i = 0; len = paramArray.length, i < len; i++) { 
      var param = paramArray[i]; 
      var splitter = parameter + "="; 
      if (param.indexOf(splitter) > -1) { 
       value = param.substring(param.indexOf(splitter) 
         + splitter.length, param.length); 
       break; 
      } 

     } 
    } 
    return value; 

}

Exemple

getParameterValue(data, "browserName"); 

output is MSIE //correct 

problème est

getParameterValue(data, "cookies"); 

Output is 

Rgn=%7CCode%3DMUMBAI%7Ctext%3DMumbai%7C; NREUM=s=1376355292394 

Mais la production est nécessaire

Rgn=%7CCode%3DMUMBAI%7Ctext%3DMumbai%7C; NREUM=s=1376355292394&r=220970&p=2080092;cs_uuid=209712058942163; cs_si=209712058942163.1 

savoir:

Le paramètre 1.URL est codé (côté client) lors de l'envoi au serveur de noeud et décodé.

2.NREUM est pas codé, donc la méthode GetParameterValue divise jusqu'à 1376355292394.

Toute aide pour améliorer getParameterValue fonction.

Prêt à expliquer plus.

+0

Pourquoi exactement l'URL NREUM n'est-elle pas codée? Cela résoudrait votre problème. –

Répondre

7

Eh bien, getParameterValue() semble analyser correctement data, mais data n'est pas encodé correctement pour faire la distinction entre les délimiteurs et les caractères de valeur.

La valeur de cookies, par exemple:

cookies=Rgn=%7CCode%3DMUMBAI%7Ctext%3DMumbai%7C; NREUM=s=1376355292394&r=220970&p=2080092;cs_uuid=209712058942163; cs_si=209712058942163.1 

Faut-il encodées lui-même (au-dessus de tout codage utilisé pour le cookie valeurs elles-mêmes).

cookies=Rgn%3D%257CCode%253DMUMBAI%257Ctext%253DMumbai%257C%3B%20NREUM%3Ds%3D1376355292394%26r%3D220970%26p%3D2080092%3Bcs_uuid%3D209712058942163%3B%20cs_si%3D209712058942163.1 

Et, il est un peu tard pour essayer de « fix » ce côté serveur à cause de l'ambiguïté. Il devra être codé côté client, ce qui peut être fait avec encodeURIComponent().

'cookies=' + encodeURIComponent(cookies) 

Si vous arrive d'utiliser jQuery, vous pouvez utiliser jQuery.param() pour assurer un codage correct.

var data = { 
    browserName: 'MSIE', 
    cookies: document.cookie, 
    javascriptEnabled: true 
}; 

data = $.param(data); // browserName=MSIE&cookies=Rgn%3D%257CCode... 

Ou, vous pouvez utiliser une récréation léger, au moins pour le format « traditionnel ».

function urlParam(params) { 
    var res = []; 

    for (var name in params) { 
     res.push(encodeURIComponent(name) + '=' + encodeURIComponent(params[name])); 
    } 

    return res.join('&'); 
} 

var data = urlParam(data); 

Exemple: http://jsfiddle.net/GQpTB/


, sont également conscients du fait que vous Node.js a querystring.parse()?

// with: var qs = require('querystring'); 
var query = qs.parse(data); 

console.log(query.cookies); // ... 
+0

@ karthick.k, utilisez le module querystring de NodeJS et tout encoder correctement côté client. –