如何使用nodeJS处理来自XMLHttpRequest POST的JSON数据

时间:2018-10-14 03:26:12

标签: javascript node.js xmlhttprequest

总体目标是将我在网页上创建的JSON数据保存到本地文件中。我肯定是向服务器发送了一些内容,但不是我似乎可以访问的格式。

JsonData看起来像:

{MetaData: {Stock: "UTX", Analysis: "LinearTrend2"}
Projections: [2018-10-12: 127.62, 2018-10-11: 126.36000000000001, 2018-10-10: 132.17, 2018-10-09: 140.12, 2018-10-08: 137.73000000000002, …]}

我的网页上的XMLHttpRequest:

function UpdateBackTestJSON(JsonUpdate){ //JsonUpdate being the JSON object from above
	var request = new XMLHttpRequest();
	request.open('POST', 'UpdateBackTestJSON');
	request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
	// request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");

	request.onload = function() {
	  console.log("Updated JSON File");
	};
	console.log("about to send request");
	console.log(JsonUpdate);
	request.send(JSON.stringify(JsonUpdate));
}

然后我在服务器上处理帖子(我意识到这很粗心,只是从功能入手)

var http = require('http')
  , fs   = require('fs')
  , url  = require('url')
  , port = 8008;

var server = http.createServer (function (req, res) {
  var uri = url.parse(req.url)
  var qs = require('querystring');
  if (req.method == 'POST'){
    var body = '';
    req.on('data', function (data){
      body += data;
      // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
      if (body.length > 1e6){ 
        // FLOOD ATTACK OR FAULTY CLIENT, NUKE REQUEST
        req.connection.destroy();
      }
    });
    req.on('end', function () {
      var POST = qs.parse(body);
      console.log(POST); // PARSED POST IS NOT THE RIGHT FORMAT... or something, idk whats going on

      UpdateBackTestData(POST);
    });
  }
  
  function UpdateBackTestData(TheJsonData){
  console.log("UpdateBackTestData");
  console.log(TheJsonData);
  JsonUpdate = JSON.parse(TheJsonData);
  console.log(JsonUpdate["MetaData"]);

  //var Stock = JsonUpdate["MetaData"]["Stock"];


  // var Analysis = JsonUpdate["MetaData"]["Analysis"];
  fs.writeFile("/public/BackTestData/"+Analysis+"/"+Stock+".json", TheJsonData, function(err){
    if(err){
      console.log(err);
    }
    console.log("updated BackTest JSON!!!");
  });
}

最让我感到困惑的是,当我运行此命令时,我试图传递的Json对象确实通过了服务器,但是整个数据都是一个字符串,用作对象中空白值的键。当我解析POST的正文时,我得到:{'{MetaData:{'Stock':'UTX','Analysis:'LinearTrend2'},'Projections':[...]}': ''}。所以我的数据在那里...但不是实用格式。

我不希望使用Express或其他服务器工具,因为我的服务器中设置了大量其他服务,如果可以避免的话,我不想回去更改。

感谢您的帮助

0 个答案:

没有答案