javascript - 难以理解NodeJS中的回调方式

标签 javascript node.js

这是 nodeschool.io 冒险流类(class)练习的解决方案。

我很难理解这条线是如何工作的

req.pipe(upper).pipe(res)  

如果能深入解释内部发生的情况,我们将不胜感激。

据我了解,请求将其信息发送到上层进行转换,但是当它通过回调返回时,第二个管道是否调用了返回值?

var http = require('http');
var fs = require('fs');
var through2 = require('through2');

var upper = through2(function(data, _, next) {
   data = data.toString().toUpperCase();
   next(null,data);
});


http.createServer(function(req,res) {
   if (req.method == 'POST') {
      req.pipe(upper).pipe(res);
   }
}).listen(process.argv[2]);

最佳答案

.pipe 是或多或少的糖分

req.on('data', function(chunk) {
    next_stream.write(chunk);
});

// also handle the 'end' and 'close' events

并返回 next_stream,因此可以链接 .piperes 是一个可写流,表示浏览器读取的流,只需要将其写入并关闭以便响应使其到达浏览器,即 .pipe

我想在这种情况下没有真正调用“完成”响应的“回调”是毫无值(value)的。浏览器只是在我们将数据写入 res 时获取数据,并在 res 关闭时停止加载更多数据。

查看 the .pipe method 的 NodeJS 源代码

关于javascript - 难以理解NodeJS中的回调方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31866409/

相关文章:

node.js - Laravel Mix HMR 编译后不更新

javascript - 对数组中的数组进行过滤,有没有一种优雅的方法可以做到这一点?

javascript - 如果字符超过 Vue.js 中的限制,则仅显示名称的一部分

javascript - 页面加载在div中,不想为主页创建新页面

javascript - 如何对路由发出 get 请求并从 API 检索信息?

node.js - 处理 TCP 套接字错误 ECONNREFUSED

javascript - 如何正确检查索引是否存在,然后使用索引获取值,然后从数组 javascript/jquery 中删除索引和值

javascript - JQueryMobile 中的弹出窗口/工具提示位置

javascript - Nodejs 等待本地主机......并获取数据

node.js - 将 karma 与 Docker 一起使用时未捕获 Chrome