node.js 中 through2-map 的替代方案 [与 learnyounode 相关]
alternative to through2-map in node.js [related to learnyounode]
我正在解决的问题:
编写一个仅接收 POST 请求并将传入的 POST 正文字符转换为大写并 returns 将其发送给客户端的 HTTP 服务器。
您的服务器应该侦听您程序的第一个参数提供的端口。
我的解决方案
var http = require('http');
var map = require('through2-map')
http.createServer(function(request,response){
if (request.method == 'POST'){
request.pipe(map(function (chunk) {
return chunk.toString().toUpperCase();
})).pipe(response);
}
}).listen(process.argv[2]);
我可以在不使用 through2-map 的情况下实现吗?
我的残废解决方案不起作用:
request.on('data',function(data){
body += data.toString();
console.log(body);
});
request.pipe(body.toUpperCase()).pipe(response);
我可以做真正的困难吗?
在第二个片段中,body.toUpperCase()
将在任何 'data'
事件实际发生之前立即采取行动。对 .on()
的调用仅添加了事件处理程序,因此它会被调用,但尚未调用它。
您可以使用 'end'
event 和 'data'
来等待接收所有 data
块,准备大写:
request.on('data', function (data) {
body += data.toString();
});
request.on('end', function () {
response.end(body.toUpperCase());
});
注意:确保声明 body
并为其分配初始值:
var body = '';
response.on('data', ...);
// ...
我正在解决的问题:
编写一个仅接收 POST 请求并将传入的 POST 正文字符转换为大写并 returns 将其发送给客户端的 HTTP 服务器。
您的服务器应该侦听您程序的第一个参数提供的端口。
我的解决方案
var http = require('http');
var map = require('through2-map')
http.createServer(function(request,response){
if (request.method == 'POST'){
request.pipe(map(function (chunk) {
return chunk.toString().toUpperCase();
})).pipe(response);
}
}).listen(process.argv[2]);
我可以在不使用 through2-map 的情况下实现吗?
我的残废解决方案不起作用:
request.on('data',function(data){
body += data.toString();
console.log(body);
});
request.pipe(body.toUpperCase()).pipe(response);
我可以做真正的困难吗?
在第二个片段中,body.toUpperCase()
将在任何 'data'
事件实际发生之前立即采取行动。对 .on()
的调用仅添加了事件处理程序,因此它会被调用,但尚未调用它。
您可以使用 'end'
event 和 'data'
来等待接收所有 data
块,准备大写:
request.on('data', function (data) {
body += data.toString();
});
request.on('end', function () {
response.end(body.toUpperCase());
});
注意:确保声明 body
并为其分配初始值:
var body = '';
response.on('data', ...);
// ...