繁体   English   中英

cors JSON输入意外结束

[英]cors unexpected end of JSON input

end解析了json,但仍收到此错误。

'use strict';
const http = require('http');
const tools = require('./tools.js');

const server = http.createServer(function(request, response) {
    console.log("received " + request.method + " request from " + request.headers.referer)

    var body = "";
    request.on('error', function(err) {
        console.log(err);
    }).on('data', function(chunk) {
        body += chunk;
    }).on('end', function() {
        console.log("body " + body);
        var data = JSON.parse(body); // trying to parse the json
        handleData(data);
    });

    tools.setHeaders(response);
    response.write('message for me');
    response.end();
});
server.listen(8569, "192.168.0.14");

console.log('Server running at 192.168.0.14 on port ' + 8569);

从客户端发送的数据:

var data = JSON.stringify({
    operation: "shutdown",
    timeout: 120
});

我已成功收到json,但无法解析它。

更新:

我已经更新了代码,以完整包含服务器代码。

要完全清楚,请使用以下代码:

....
}).on('end', function() {
        console.log("body " + body);
        var json = JSON.parse(body); // trying to parse the json
        handleData(json);
});

我得到这个:

描述

但是,这:

....
}).on('end', function() {
    console.log("body " + body);
    //var json = JSON.parse(body); // trying to parse the json
    //handleData(json);
});

产生这个

描述

我们可以看到服务器代码吗?

我相信,这是一个(或多或少)您正在尝试的端到端工作示例。

"use strict";
const http = require('http');

/********************
  Server Code
********************/
let data = {
    operation: 'shutdown',
    timeout: 120
};
const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify(data));
    res.end();
});
server.listen(8888);

/********************
  Client Code
********************/
let options = {
    hostname: 'localhost',
    port: 8888,
    path: '/',
    method: 'POST',
    headers: {
        'Accept': 'application/json'
    }
};
let req = http.request(options, res => {
    let buffer = '';
    res.on('data', chunk => {
        buffer += chunk;
    });
    res.on('end', () => {
        let obj = JSON.parse(buffer);
        console.log(obj);
        // do whatever else with obj
    });
});
req.on('error', err => {
    console.error('Error with request:', err);
});
req.end(); // send the request.

事实证明,由于这是一个跨域(cors)请求,因此它试图解析预检请求中发送的数据。

我只需要添加一个if就可以了

....    
}).on('end', function() {
    if (request.method !== 'OPTIONS') {
        var data = JSON.parse(body);
        handleData(data);
    }
});

成功

如果您有兴趣进一步阅读: HTTP访问控制(CORS)

将标识符放在引号中。

{
    "operation": "shutdown",
    "timeout": 120
}

http://jsonlint.com/是有用的资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM