Javascript Node.js设置了错误的内容长度。我怎么设置这个

Javascript Node.js设置了错误的内容长度。我怎么设置这个,javascript,node.js,express,body-parser,Javascript,Node.js,Express,Body Parser,我需要一些帮助。即使我将内容长度设置为响应对象,它似乎也不起作用。我做错什么了吗 res.set({ 'Content-Type': res._data.ContentType, 'Content-Length': res._data.ContentLength, ETag: res._data.ETag }); res.send(res._data.Body); 我使用express和body解析器发送数据,并设置内容长度 res.header('Content-Type', r

我需要一些帮助。即使我将内容长度设置为响应对象,它似乎也不起作用。我做错什么了吗

res.set({
  'Content-Type': res._data.ContentType,
  'Content-Length': res._data.ContentLength,
  ETag: res._data.ETag
});
res.send(res._data.Body);
我使用express和body解析器发送数据,并设置内容长度

res.header('Content-Type', res._data.ContentType);
res.header('content-length', res._data.ContentLength);
res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
我也试过这个

{ AcceptRanges: 'bytes',
  LastModified: 'Thu, 15 Jan 2015 22:23:43 GMT',
  ContentLength: '648789',
  ETag: '"7da971554e6ff4f6dfcdb7b2ba5e0be3"',
  ContentType: 'image/jpeg',
  Metadata: {},
  Body: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 01 00 48 00 48 00 00 ff db 00 43 00 08 06 06 07 06 05 08 07 07 07 09 09 08 0a 0c 14 0d 0c 0b 0b 0c 19 12 13 0f 14 ...> }
但是node.js对客户端的响应长度错误,大小为1227943

Cache-Control:no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0
Connection:keep-alive
content-length:1227943
Content-Type:image/jpeg
Date:Thu, 15 Jan 2015 23:37:52 GMT
ETag:"7da971554e6ff4f6dfcdb7b2ba5e0be3"
X-Powered-By:Express
客户也会收到。有人知道我错过了什么? 请帮帮我

哦,我忘了提了。当我使用Postman(chrome扩展)获取数据时,它工作得很好

GET /api/images/54b83dec5e7d97c546e0c41a 200 664.427 ms - 648789

所以我真的不知道为什么会发生这种情况。

当您使用Express'
响应时,您不能手动设置
内容长度。
发送方法:该方法所做的最后一件事是根据(令人惊讶的)发送内容的长度设置
内容长度。您可以在源代码中的
send
方法末尾看到:

换句话说,Express覆盖了
内容长度


它看起来像
res.\u data.ContentLength
不反映缓冲区的大小
res.\u data.Body
。查看
res.\u data.Body.length
是什么;我猜是1227943。

res.\u data
是我想要对客户端做出的响应,在本例中,来自AWS S3对象的数据。和
res.end()
也尝试放置,但总是响应错误的内容长度。感谢您的回答。我尝试设置
内容长度
,因为当我在chrome.Updated中接收数据时,我收到了错误的
内容长度
。我想你的问题出在
res.\u data
。什么是设置
res.\u数据
?我不认为
res.\u data.ContentLength
是您所认为的….
res.\u data
是AWS S3对象的响应数据。在这个对象中,
Body
是我想要返回的缓冲数据。而
ContentLength
就是
Body
缓冲区的长度。几乎所有的情况下,它工作良好。但当它响应少量大数据(在chrome中)时,它响应的长度是错误的。当我使用Postman时,它也可以工作。嗯…我忍不住认为这是一个内容编码问题…也许它被编码为UTF-8?您得到的大小几乎是报告的缓冲区大小的两倍,这可能与不需要的UTF-8编码一致。。。。邮递员可能正在设置接受标头。。。。我会检查所有来来去去去的标题,看看是否有任何线索……谢谢。我尝试在响应数据上使用
toString()
,它返回了错误的
内容长度编号
,即使我尝试了邮递员。我现在看到了编码问题。谢谢你,伊桑。(我还尝试在
response.js
中打印日志
content length
,它返回了正确的长度。)总之,解决了这个问题。谢谢
GET /api/images/54b83dec5e7d97c546e0c41a 200 664.427 ms - 648789