javascript - 如何使用 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 或其他服务器工具,因为我的服务器中设置了相当数量的其他服务,如果可以避免的话,我不想回去更改。
谢谢你的帮助
解决方案
推荐阅读
- animation - Flutter - 如何拥有任意数量的隐式动画
- python - 如何在 django sqlite db 中上传创建的 xml 文件
- c# - 异步数据加载但 UI 变得无响应 WPF
- azure - 在 MVC 应用程序中添加 Azure Active Directory 用户
- javascript - 错误:用户 'postgres'@'localhost' 的访问被拒绝(命令行)
- sql - 使用 If Exists 语句更新或插入行的 SQL 查询不起作用
- python - Dask between_time 是否存在?
- kotlin - 如何在 Kotlin 中减去 2 个浮点数
- monaco-editor - Monarch语言中的括号不起作用/不折叠
- c# - 为什么只使用一个 DataTrigger?