为什么会出现SyntaxError:输入意外结束?

时间:2019-05-22 02:18:17

标签: javascript node.js socket.io

运行节点服务器时,出现以下错误。

SyntaxError:输入意外结束

var http = require('http');
var socketio = require('socket.io');

if (typeof String.prototype.startsWith != 'function') {
  String.prototype.startsWith = function (str){
    return this.slice(0, str.length) == str;
  };
}

function log_me(msg){
  var ts = new Date(new Date().getTime() - (3600000*4));
  var tss = ts.toString();
  tss = tss.substring(0, tss.indexOf(' GMT'));
  console.log(tss + ": " + msg);
}

var app = http.createServer(function(req, res) {
    var postData = "";
    req.on('data', function(chunk) {
      postData += chunk; //Get the POST data
    });

    req.on('end', function() {
      if (typeof(postData) !== "undefined") {
        var message = JSON.parse(postData);  <-- Here is the issue line 25

        //Do something here
        //Todo...
      }
    });
    res.end();
}).listen(8080);  //Use a non-standard port so it doesn't override your Apache

var io = socketio.listen(app);
//var io = require('socket.io').listen(8080,'0.0.0.0');
io.set('log level', 2);
// io.set('transports', ['flashsocket', 'polling', 'websocket']);
io.set('origins', '*:*');

1 个答案:

答案 0 :(得分:1)

您可以使用类似的东西:

JSON.safeParse = function(data) {
    try {
        return JSON.parse(data);
    } catch (e) {
        return false;
    } 
}

将您的JSON.parse呼叫更改为JSON.safeParse,然后检查结果是否有效:

var message = JSON.safeParse(postData);
if (message) {
    // valid!
} else {
    // invalid
}