Я пытаюсь настроить экспресс-сервер js, на котором будет размещаться база данных mongodb. Все довольно стандартно: у меня есть несколько открытых маршрутов, которые будут получать данные от клиента, а затем сохранять их в базе данных.
Вот моя строка запроса:
let url = "http://xxx.xxx.xx.xxx:3000/update/data = " + JSON.stringify(params);
Что я заметил, так это то, что если params не содержит много информации, он работает нормально. Однако, если params содержит много информации, то клиент выдает эту ошибку:
Failed to load resource: The network connection was lost.
Http failure response for (unknown url): 0 Unknown Error
(Эта же ошибка возникает как в Safari, так и в Chrome.)
Например, если параметры указаны ниже:
{
"accountId": "12345678910",
"data": [
1, 2, 3, 4
]
}
тогда нет проблем. Однако, если params.data — это огромный массив с кучей информации, а не просто [1, 2, 3, 4], возникает ошибка.
Кроме того, мой экспресс-сервер даже не получает запрос. Нет журналов; ничего такого. Я ожидаю, что это будет обычный ответ и результат, однако, похоже, что клиент просто отказывается от отправки чего-то большого. Возможно, это как-то связано с отправкой его в виде большой строки?





Вы помещаете свои данные на свой URL. Но URL-адреса имеют ограниченную длину.
Вам нужно использовать POST и поместить свои данные в тело HTTP-запроса.
Вы не показали нам, как вы используете этот URL-адрес, поэтому трудно вносить предложения по изменению вашего кода. Использование операции http-запроса — это путь. Что-то вроде этого может сработать...
const payload = JSON.stringify(params);
const url = 'http://xxx.xxx.xx.xxx:3000/update/';
const options = {
method: 'POST', // <--- tell it to POST
headers: {
'Content-Type': 'application/json', // <--- tell it you're posting JSON
'Content-Length': payload.length; // <--- tell it how much data you're posting.
}
};
const req = http.request(url, options, (res) => {
/* handle stuff coming back from request here */
console.info(`STATUS: ${res.statusCode}`);
console.info(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
let chunks=[];
res.on('data', (chunk) => {
chunks.push(chunk);
console.info(`BODY: ${chunk}`);
});
res.on('end', () => {
const resultingData = chunks.join();
console.info('No more data in response.');
});
});
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
// write data to request body
req.write(payload);
req.end();
Вам нужно будет указать, насколько велика
JSON.stringify(params), желательно, зарегистрировав ее длину перед отправкой запроса и сообщив нам значение, для которого возникает проблема. Если это действительно проблема, вам придется изучить возможность передачи данных в виде тела, а не в URL-адресе.