首页 > 解决方案 > 如何使用 nodeJS 处理来自 XMLHttpRequest POST 的 JSON 数据

问题描述

首要目标是将我在网页上创建的一些 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 或其他服务器工具,因为我的服务器中设置了相当数量的其他服务,如果可以避免的话,我不想回去更改。

谢谢你的帮助

标签: javascriptnode.jsxmlhttprequest

解决方案


推荐阅读