0

我想送用變音(äüöß)與GCM文本,但是在發送請求時,我總是得到以下異常:谷歌雲消息:通過JavaScript請求發送UTF-8數據

{"to":"/topics/mytopic","data":{"message":"ö;ä;1471125600000;1471211999999"}} 

undefined:1 
JSON_PARSING_ERROR: Unexpected token END OF FILE at position 106. 
^ 
SyntaxError: Unexpected token J 
    at Object.parse (native) 
    at IncomingMessage.<anonymous> (c:\project\path\gcm.js:43:30) 
    at IncomingMessage.emit (events.js:129:20) 
    at _stream_readable.js:908:16 
    at process._tickCallback (node.js:355:11) 

當我發送文本沒有變音符號,everxthing工作正常,我得到了一個結果。

這裏我的JavaScript函數:

exports.sendMessage = function (req, res) { 

var topic = req.body.topic; 
var message = req.body.message; 

var data = JSON.stringify({ 
    "to": "/topics/" + topic, 
    "data": { 
     "message": message 
    } 
}); 

var options = { 
    host: 'gcm-http.googleapis.com', 
    path: '/gcm/send', 
    method: 'POST', 
    headers: { 
     'Authorization': 'key=xxx', 
     'Content-Type': 'application/json; charset=utf-8', 
     'Content-Length': data.length 
    } 
}; 

var req2 = http.request(options, function(resp) { 
    var msg = ''; 
    resp.setEncoding('utf-8'); 
    resp.on('data', function(chunk) { 
     msg += chunk; 
    }); 
    resp.on('end', function() { 
     console.log(JSON.parse(msg)); 

     if(JSON.parse(msg).message_id) { 
      res.send(200, {msg: "Message sent successfully! Message: " + JSON.parse(msg).message_id}); 
     } else { 
      res.send(400, {msg: "Message sending failed! Message: " + JSON.stringify(msg)}); 
     } 
    }); 
}); 

req2.write(data); 
req2.end(); 

};

我在做什麼錯?在發送之前是否需要重新編碼message字符串?

回答

0

我終於找到了幾小時的搜索 - 刪除Content-Length做了我的伎倆。所以,我的要求options現在看下面:

var options = { 
    host: 'gcm-http.googleapis.com', 
    path: '/gcm/send', 
    method: 'POST', 
    headers: { 
     'Authorization': 'key=xxx', 
     'Content-Type': 'application/json; charset=utf-8' 
     // NO CONTENT-LENGTH PARAMETER ANYMORE!!! 
    } 
}; 
+0

可能有人給一個解釋,爲什麼要與「內容長度」參數的要求適用於包含文本非變音,但不與變音符號的文本? –