0

URL パラメータの読み取りをテストするための非常に単純なスクリプトがあります。スクリプトはノードを実行している 2 台のコンピューターで正しく実行されますが、ノードを実行している 3 台目のコンピューターは失敗します。ここにスクリプトがあります:

var http = require('http');
var URL = require('url');
var host = '127.0.0.1';
var port = 8181;

// Is called when a request comes in
handler = function(req, res) {
    var url_parts = URL.parse(req.url);
            console.log("url_parts = "+url_parts);

    var query = url_parts.query;
        console.log("xxx query = "+query);

    var qArray = parseGetVars(query); 
    var body = {
        "errorCode": "0","errorMessage":"","params" : qArray
    };

    // sets content-type of the responce
    res.writeHead(200, {
        'Content-Type' : 'application/json'
    });

    // terminates the response, and passes back the json as text.
    res.end(JSON.stringify(body));


};


var parseGetVars = function(thisString) {
    var getVars = new Array();
    var qString = thisString;
    console.log("qString = "+qString);
    if(qString!=''){
        var pairs = qString.split(/\&/);
        for (var i in pairs) {
            var nameVal = pairs[i].split(/\=/);
            getVars[nameVal[0]] = nameVal[1];
        } 
    }
    console.log("getVars = "+getVars);

    return getVars;
}



http.createServer(handler).listen(port, host);

console.log('Server running at http://' + host + ':' + port + '/');

次のようにスクリプトを呼び出します: http://mydomain.com:8181/?d=1&p=2

前述したように、このスクリプトは 2 台のコンピューター (すべて v0.10.7 を実行) で問題なく動作します。3 番目に、コンソールに次のエラーが表示されます。

Server running at http://localhost:8181/
url_parts = [object Object]
xxx query = d=1&p=2
qString = d=1&p=2
getVars = 
url_parts = [object Object]
xxx query = null
qString = null

/Users/me/Sites/node/params.js:36
        var pairs = qString.split(/\&/);
                            ^
TypeError: Cannot call method 'split' of null
    at parseGetVars (/Users/me/Sites/node/params.js:36:23)
    at Server.handler (/Users/me/Sites/node/params.js:14:15)
    at Server.EventEmitter.emit (events.js:98:17)
    at HTTPParser.parser.onIncoming (http.js:2027:12)
    at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:119:23)
    at Socket.socket.ondata (http.js:1917:22)
    at TCP.onread (net.js:510:27)

どんなアイデアでも大歓迎

4

0 に答える 0