cors意外结束JSON输入

时间:2016-05-05 22:03:47

标签: json node.js

我正在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);
});

我明白了:

description

但是,这个:

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

产生这个

description

3 个答案:

答案 0 :(得分:1)

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

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

"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.

答案 1 :(得分:0)

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

我只需要添加一个if来抓住这个

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

success

如果您有兴趣,请进一步阅读:HTTP access control (CORS)

答案 2 :(得分:-1)

将标识符放在引号中。

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

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