Node.js http.createServer中的request.on(函数(请求,响应){});
关于上面的代码,我有两个问题。首先,我阅读了request的文档,它说request是IncomingMessage的一个实例,它实现了可读流。但是,我在流文档中找不到.on方法。所以我不知道request.on中回调函数的块是什么。其次,我想对来自请求的数据进行一些操作,并将其通过管道传输到响应。我应该从chunk还是从request进行管道传输?谢谢你的考虑 所有流都是Node.js http.createServer中的request.on(函数(请求,响应){});,node.js,node.js-stream,Node.js,Node.js Stream,关于上面的代码,我有两个问题。首先,我阅读了request的文档,它说request是IncomingMessage的一个实例,它实现了可读流。但是,我在流文档中找不到.on方法。所以我不知道request.on中回调函数的块是什么。其次,我想对来自请求的数据进行一些操作,并将其通过管道传输到响应。我应该从chunk还是从request进行管道传输?谢谢你的考虑 所有流都是EventEmitter()的实例,这就是.on方法的来源 关于第二个问题,您必须从流对象(在本例中为request)进行管
EventEmitter
()的实例,这就是.on
方法的来源
关于第二个问题,您必须从流对象(在本例中为request
)进行管道传输。“data”
事件以缓冲区或字符串(事件侦听器中的“chunk”
参数)而不是流的形式发出数据
操作流通常通过实现转换流()来完成。尽管有许多NPM软件包可以简化此过程(如through2map
等),但实际上,它们会生成Transform
流
考虑以下几点:
var http = require('http');
var map = require('through2-map');
uc = map(function(ch) {
return ch.toString().toUpperCase();
});
server = http.createServer(function(request, response) {
request.on('data',function(chunk){
if (request.method == 'POST') {
//change the data from request to uppercase letters and
//pipe to response.
}
});
});
server.listen(8000);
您可以通过运行curl进行测试:
var http = require('http');
var map = require('through2-map');
// Transform Stream to uppercase
var uc = map(function(ch) {
return ch.toString().toUpperCase();
});
var server = http.createServer(function(request, response) {
// Pipe from the request to our transform stream
request
.pipe(uc)
// pipe from transfrom stream to response
.pipe(response);
});
server.listen(8000);
所有流都是EventEmitter
()的实例,这就是.on
方法的来源
关于第二个问题,您必须从流对象(在本例中为request
)进行管道传输。“data”
事件以缓冲区或字符串(事件侦听器中的“chunk”
参数)而不是流的形式发出数据
操作流通常通过实现转换流()来完成。尽管有许多NPM软件包可以简化此过程(如through2map
等),但实际上,它们会生成Transform
流
考虑以下几点:
var http = require('http');
var map = require('through2-map');
uc = map(function(ch) {
return ch.toString().toUpperCase();
});
server = http.createServer(function(request, response) {
request.on('data',function(chunk){
if (request.method == 'POST') {
//change the data from request to uppercase letters and
//pipe to response.
}
});
});
server.listen(8000);
您可以通过运行curl进行测试:
var http = require('http');
var map = require('through2-map');
// Transform Stream to uppercase
var uc = map(function(ch) {
return ch.toString().toUpperCase();
});
var server = http.createServer(function(request, response) {
// Pipe from the request to our transform stream
request
.pipe(uc)
// pipe from transfrom stream to response
.pipe(response);
});
server.listen(8000);
这是一条小溪吗
没有。流是整个数据块之间发送的流。
一个简单的例子,如果你读取一个1gb的文件,一个流将以10k的块读取它,每个块将以正确的顺序从头到尾通过你的流。
我使用一个文件作为例子,但是套接字、请求或任何流都是基于这个想法的
而且,每当有人向这个服务器发送请求时,整个内容会是一个块吗
在http请求的特定情况下,只有请求主体是流。它可以是已发布的文件/数据。或响应的响应体。在将主体写入套接字之前,标头被视为应用于请求的对象
这是一个小示例,可以帮助您编写一些具体的代码
$ curl -X POST -d 'foo=bar' http://localhost:8000
# logs FOO=BAR
我建议你多读一些:
这是一条小溪吗
没有。流是整个数据块之间发送的流。
一个简单的例子,如果你读取一个1gb的文件,一个流将以10k的块读取它,每个块将以正确的顺序从头到尾通过你的流。
我使用一个文件作为例子,但是套接字、请求或任何流都是基于这个想法的
而且,每当有人向这个服务器发送请求时,整个内容会是一个块吗
在http请求的特定情况下,只有请求主体是流。它可以是已发布的文件/数据。或响应的响应体。在将主体写入套接字之前,标头被视为应用于请求的对象
这是一个小示例,可以帮助您编写一些具体的代码
$ curl -X POST -d 'foo=bar' http://localhost:8000
# logs FOO=BAR
我建议你多读一些:
关于但是,我在流文档中找不到.on方法。
这是因为流实现了EventEmitter(文档说所有流都是EventEmitter
)。您必须在上检查此特定方法。否则我就不明白你的问题了。基本上,您应该通过管道将请求流传输到响应流中。流由从一端写入另一端的数据块组成。数据块是流吗?而且,每当有人向这个服务器发送请求时,整个内容会是一个块吗?如果两个人发送两个请求,那会是两个块吗?关于,但是,我在流文档中找不到.on方法。
这是因为流实现了EventEmitter(文档说所有流都是EventEmitter
)。您必须在上检查此特定方法。否则我就不明白你的问题了。基本上,您应该通过管道将请求流传输到响应流中。流由从一端写入另一端的数据块组成。数据块是流吗?而且,每当有人向这个服务器发送请求时,整个内容会是一个块吗?如果两个人发送两个请求,那会是两块吗?