2017-05-07 1 views
3

Mein REST-Service ist die folgende:NodeJS REST türkischen Charakter, hängen Sockel bis

const 
 
    express = require('express'), 
 
    app = express(); 
 
    
 
    ... 
 
    
 
app.get('/turkish-escape/:id', function(req, res) { 
 
    console.log("converting turkish special characters:"); 
 
    console.log("\u011f \u011e \u0131 \u0130 \u00f6 \u00d6 \u00fc \u00dc \u015f \u015e \u00e7 \u00c7"); 
 
    let char = req.params.id; 
 
    
 
.....//DO stuff

Wenn ich versuche, den Dienst im Browser GET erhalte ich keine Fehler: http://localhost:8081/turkish-escape/ğ/

Wenn ich versuche, das Ergebnis mit meinem REST-Client zu bekommen, stoße ich auf einige türkische Sonderzeichen.

Client-Code:

let currentChar = text[i]; 
 
    let 
 
    request = require('request'), 
 
    options = { 
 
     method: 'GET', 
 
     url: 'http://localhost:8081/turkish-escape/' + currentChar + "/" 
 
    }; 
 
    request(options, function(err, res, body) { 
 
     if(err) { 
 
     throw Error(err); 
 
     } else { 
 
     body = JSON.parse(body); 
 
     console.log(body.convertedChar); 
 
     newText += body.convertedChar; 
 
     } 
 
    });

Wenn ich den Client mit einem 'ü' nenne es funktioniert gut, aber wenn ich es mit einem 'G' nennen stürzt. Das ist der Ruf und Stack-Trace:

./turkishTextConverter.js ğ 
/pathtofile/turkishTextConverter.js:25 
    throw Error(err); 
    ^

Error: Error: socket hang up 
at Request._callback (/pathtofile/turkishTextConverter.js:25:15) 
at self.callback (/pathtofile/node_modules/request/request.js:188:22) 
at emitOne (events.js:96:13) 
at Request.emit (events.js:191:7) 
at Request.onRequestError (/pathtofile/node_modules/request/request.js:884:8) 
at emitOne (events.js:96:13) 
at ClientRequest.emit (events.js:191:7) 
at Socket.socketOnEnd (_http_client.js:394:9) 
at emitNone (events.js:91:20) 
at Socket.emit (events.js:188:7) 

Wie Sie aus dem Stapel sehen es erreicht nicht einmal die erste console.log Erklärung der REST-Service

+0

Der Stack-Trace scheint vom Client zu stammen, nicht vom Server. – robertklep

+0

Danke, aber warum stürzt mein Klient? Es gibt kein Problem, wenn ich das GET mit meinem Browser mache. Brauche ich eine Art von Zeichen en/decodingß – nufuk

+0

Es könnte sein, dass der Server abstürzt, was den Client zum Absturz bringt. In jedem Fall sollten Sie UTF-8-Codierung verwenden. – robertklep

Antwort

1

Die Lösung wurde die URL encodeURI:

... 
url: 'http://localhost:8081/turkish-escape/' + currentChar + "/" 
... 

zu

... 
url: encodeURI('http://localhost:8081/turkish-escape/' + currentChar + '/') 
... 

und jetzt der Client wird nicht abstürzen mehr