【发布时间】:2014-12-30 06:17:09
【问题描述】:
我正在研究一些 Learnyounode/nodeschool 示例,希望能更好地了解流转换。我使用http.createServer() 在节点中创建了一个简单的http 服务器。我的希望是能够先充分理解流,而不必依赖像 through 或 through2 这样的辅助库。如果可能的话,我希望它更“本地到节点”,并通过这种方式更好地理解节点中的流概念。
给定一个 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)
编辑 我学到了什么: 根据下面接受的答案,并非节点中的所有流都支持自己的转换。当您需要对 readableStream(或其他类似类型)执行转换时,请创建一个 stream.transform() 并改为管道。
【问题讨论】:
标签: javascript node.js