Node.js 不传送内容
Node.js does not pipe contents
我有一个简单的 Web 服务器,它应该发送一个文件。我从 another answer.
中获取了代码
#! /usr/bin/node
const FS = require ('fs');
const HTTP = require ('http');
const server = HTTP.createServer ();
server.on ('request', (request, response) => {
switch (request.url) {
case '/':
switch (request.method) {
case 'GET':
console.log ("GET /");
let stat = FS.statSync ('index.html');
console.log (stat.size);
response.writeHead (200, { 'Content-Type': 'text/html',
'Content-Lenght': stat.size });
let index = FS.createReadStream ('index.html', 'UTF-8');
index.pipe (response);
response.end ();
return;
}
break;
}
response.writeHead (400, {});
response.end ();
});
server.listen (8080);
当我尝试使用 curl
发送 GET 请求时,我没有收到任何内容。我的服务器报告,index.html
文件有 324 个字节:
$ ./server.js
GET /
324
但是curl
不显示内容。 header 包含内容长度,但缺少 body。
$ curl -v --noproxy \* http://localhost:8080/
[...]
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Lenght: 324
< Date: Sat, 21 Nov 2020 19:24:31 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
我看起来好像连接在文件传输之前关闭了。这是错误吗?我该如何避免?
删除 response.end ();
。在 .pipe()
开始工作之前,您过早地关闭了响应(它是异步的,因此它会随着时间的推移而完成,并且 returns 在完成之前)。
在默认配置中,.pipe()
将在完成后为您结束响应。
您还会注意到 the other answer 您从中汲取了这个想法并没有 response.end()
。
我有一个简单的 Web 服务器,它应该发送一个文件。我从 another answer.
中获取了代码#! /usr/bin/node
const FS = require ('fs');
const HTTP = require ('http');
const server = HTTP.createServer ();
server.on ('request', (request, response) => {
switch (request.url) {
case '/':
switch (request.method) {
case 'GET':
console.log ("GET /");
let stat = FS.statSync ('index.html');
console.log (stat.size);
response.writeHead (200, { 'Content-Type': 'text/html',
'Content-Lenght': stat.size });
let index = FS.createReadStream ('index.html', 'UTF-8');
index.pipe (response);
response.end ();
return;
}
break;
}
response.writeHead (400, {});
response.end ();
});
server.listen (8080);
当我尝试使用 curl
发送 GET 请求时,我没有收到任何内容。我的服务器报告,index.html
文件有 324 个字节:
$ ./server.js
GET /
324
但是curl
不显示内容。 header 包含内容长度,但缺少 body。
$ curl -v --noproxy \* http://localhost:8080/
[...]
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Lenght: 324
< Date: Sat, 21 Nov 2020 19:24:31 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked
<
* Connection #0 to host localhost left intact
我看起来好像连接在文件传输之前关闭了。这是错误吗?我该如何避免?
删除 response.end ();
。在 .pipe()
开始工作之前,您过早地关闭了响应(它是异步的,因此它会随着时间的推移而完成,并且 returns 在完成之前)。
在默认配置中,.pipe()
将在完成后为您结束响应。
您还会注意到 the other answer 您从中汲取了这个想法并没有 response.end()
。