gpt4 book ai didi

javascript - 了解 Node.js 中的简单流转换

转载 作者:行者123 更新时间:2023-11-30 17:07:29 25 4
gpt4 key购买 nike

我正在研究一些 Learnyounode/nodeschool 示例,希望能更好地理解流转换。我使用 http.createServer() 在 Node 中创建了一个简单的 http 服务器。我希望能够首先充分理解流,而不必依赖像 throughthrough2 这样的辅助库。如果可能的话,我希望它更“本地到 Node ”,并以这种方式更好地理解 Node 中的流媒体概念。

给定一个 POST 请求(在本学习案例中得到保证),我想使用 .toUpperCase() 将请求正文中的字符转换为大写字符。我对 JS 足够熟悉,发现这部分很容易,但我的困惑主要源于为什么我的流 .pipe()-ing 到 response 不是转变。

我能够 log() 输出转换后的字符,但出于某种原因,我没有看到它们没有作为实际转换后的字符返回。我知道 .toUpperCase() 不会影响实际的字符串本身,但我正在返回该值,所以这似乎不是我的困惑所在(但请帮助我澄清是否我错了)。谢谢大家!

POST 上的示例输入:

鲍勃

拉里

预期输出:

鲍勃

拉里

实际输出:

鲍勃

拉里

我的简单服务器:

var http = require('http')
var port = process.argv[2]

var server = http.createServer(function(req, res) {
if (req.method != 'POST') {
console.log('You have failed to comply with our stringent demands');
return false
}
req.on('data', function(chunk) {
return chunk.toString().toUpperCase()
}).pipe(res);
})

server.listen(port)

编辑 我学到了什么:根据下面接受的答案,并非 Node 中的所有流都支持自行转换。当您需要对 readableStream(或其他类似类型)执行转换时,创建一个 stream.transform() 并将其改为管道。

最佳答案

可读流本身不支持转换。

您需要创建一个 stream.Transform并定义它的 _transform() ,然后将它与另一个 .pipe() 链接在 reqres 之间:

var stream = require('stream');

var server = http.createServer(function(req, res) {
// ...

var uppercase = new stream.Transform();
uppercase._transform = function (data, enc, cb) {
cb(null, data.toString().toUpperCase());
};

req.pipe(uppercase).pipe(res);
})

关于javascript - 了解 Node.js 中的简单流转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27695568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com