Я пытаюсь отправить довольно большое количество JSON на мой сервер Node-Express через xmlhttprequest.В прошлом я мог передавать параметры, кодируя их в URL.JSON, который я отправляю, слишком длинный для кодирования в URL, поэтому я пытаюсь отправить его в теле.Пока что тело является пустым объектом.
Я прочитал статью mdn на xmlhttprequest.send () .Я рассмотрел это , это и это при переполнении стека, и решения не решают мою проблему.
Вот мой код на стороне клиента:
var xhr = new XMLHttpRequest();
var body = {/*a javascript object with data to be sent to server*/};
var uri = 'https://my_internal_corporate_url/endpoint';
var bodyStringified = JSON.stringify(body)
xhr.open('POST', uri, true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(bodyStringified);
xhr.onreadystatechange = processRequest;
xhr.addEventListener("readystatechange", processRequest, false);
function processRequest(e) {
// do stuff with server response
}
Мой сервер-экспресс-узел получает запрос, но я не могу найти содержимое 'bodystringified' в любом месте объекта запроса, который говорит мне, что я не являюсьправильное построение объекта запроса или мой API не может правильно проанализировать запрос.
Я думал, что выбрал неправильный тип контента в методе setRequestHeader выше.Однако я начинаю думать, что мой сервер не настроен должным образом для анализа тела запроса.
Вот фрагмент моего кода Node-Express:
const express = require('express');
const path = require('path');
require('dotenv').config({
path: path.join(__dirname, '../.env')
});
const bodyParser = require('body-parser');
const app = express();
const queries = require('./controllers/queries');
const os = require('os');
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, '../client/dist')));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
И фрагмент кода конечной точки, обрабатывающего эти запросы:
const sendData = (data, res, status) => {
if (status) {
res.status(status).send(data);
} else {
res.send(data);
}
}
router.post('/rw_json_to_html', (req, res) => {
console.log('req: ', req); // <-- when I inspect this obj, I can't find my json.
let data = // do stuff with the json provided in body of req object
sendData(data, res, 200);
}
ВОПРОСЫ: 1. Я неправильно устанавливаю заголовки запроса или что-то в коде клиента?2. Я что-то упускаю в своих опциях Node-Express для правильного анализа тела запросов?Например, параметры парсера тела?В прошлом я использовал axios и не имел проблем с получением тел запросов, но текущее приложение требует от меня использования простого ванильного JavaScript в клиенте.
Большое спасибо за чтение моего поста.