Общая цель - сохранить некоторые данные 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.info("Updated JSON File");
};
console.info("about to send request");
console.info(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.info(POST); // PARSED POST IS NOT THE RIGHT FORMAT... or something, idk whats going on
UpdateBackTestData(POST);
});
}
function UpdateBackTestData(TheJsonData){
console.info("UpdateBackTestData");
console.info(TheJsonData);
JsonUpdate = JSON.parse(TheJsonData);
console.info(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.info(err);
}
console.info("updated BackTest JSON!!!");
});
}Больше всего меня сбивает с толку то, что когда я запускаю это, объект Json, который я пытаюсь передать, проходит на сервер, но все данные представляют собой строку, используемую в качестве ключа для пустого значения в объекте. когда я разбираю тело сообщения POST, я получаю: {'{MetaData:{'Stock':'UTX','Analysis:'LinearTrend2'},'Projections':[...]}': ''}. Итак, мои данные есть ... но не в практическом формате.
Я бы предпочел не использовать экспресс или другие серверные инструменты, так как на моем сервере настроено изрядное количество других сервисов, которые я не хочу возвращаться и изменять, если я могу этого избежать.
Спасибо за любую помощь
смотрю, когда мой сервер пытается проанализировать мои данные запроса: журнал сервера req.on('end', function () { var POST = qs.parse(body); console.info('XMLHttpRequest of method post recieved'); console.info(body); console.info(POST); UpdateBackTestData(POST); });: XMLHttpRequest of method post recieved {"MetaData":{"Stock":"UTX","Analysis":"LinearTrend2"},"Projections":[]} { '{"MetaData":{"Stock":"UTX","Analysis":"LinearTrend2"},"Projections":[]}': '' }



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Можете ли вы показать точно, что такое
var POST(и что такоеbody) - потому что похоже, что у вас есть объект, чей ключ - это JSON, который вы ищете (за исключением того, что это недопустимый JSON, поскольку он использует'вместо") - Я бы скажите, чтоbody- это JSON, который вы хотите отправить наUpdateBackTestData, но я не уверен (не знаю, что querystring.parse делает с вашим телом)