Express JS-网络连接丢失

时间:2019-02-13 20:27:35

标签: node.js http express

我正在尝试设置一个将托管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],则会引发错误。

此外,我的快递服务器似乎从未收到过请求。没有日志;没有。我希望发生的只是正常的响应和结果,但是似乎客户端只是放弃发送大量内容。也许与将其作为大字符串发送有关?

1 个答案:

答案 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();