我正在尝试设置一个将托管mongodb数据库的Express js服务器。一切都很标准:我打开了一些路由,这些路由将从客户端接收数据,然后将其存储在数据库中。
这是我的查询字符串:
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都发生了同样的错误。)
例如,如果params如下:
{
"accountId": "12345678910",
"data": [
1, 2, 3, 4
]
}
那么就没有问题了。但是,如果params.data
是一个巨大的数组,其中包含大量信息,而不仅仅是[1, 2, 3, 4]
,则会引发错误。
此外,我的快递服务器似乎从未收到过请求。没有日志;没有。我希望发生的只是正常的响应和结果,但是似乎客户端只是放弃发送大量内容。也许与将其作为大字符串发送有关?
答案 0 :(得分:0)
您将数据放在URL上。但是,URL的长度有限。
您需要使用POST并将数据放入HTTP请求正文中。
您尚未向我们展示如何使用该URL,因此很难提出有关更改代码的建议。 Using the http request operation is the way to go。像这样的事情可能会起作用...
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.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
let chunks=[];
res.on('data', (chunk) => {
chunks.push(chunk);
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
const resultingData = chunks.join();
console.log('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();