(12)大寫轉(zhuǎn)換器

2018-02-24 16:05 更新

要求

編寫一個 HTTP 服務(wù)器,它只接受 POST 形式的請求,并且將 POST 請求主體(body)所帶的字符轉(zhuǎn)換成大寫形式,然后返回給客戶端。

服務(wù)器需要監(jiān)聽由第一個命令行參數(shù)所指定的端口。

提示

這里將不限制你使用 stream 處理 request 和 response 對象,并且這將更為簡單。

在 npm 中,有很多不同的模塊可以用來在 stream 傳輸過程中 “轉(zhuǎn)換” stream 中的數(shù)據(jù)。對于本次練習來說,through2-map 這個模塊有一個比較簡單的 API 可以使用。

through2-map 允許你創(chuàng)建一個 transform stream,它僅需要一個函數(shù)就能完成「接收一個數(shù)據(jù)塊,處理完后返回這個數(shù)據(jù)塊」的功能 ,它的工作模式類似于 Array#map(),但是是針對 stream 的:

var map = require('through2-map')
inStream.pipe(map(function (chunk) {
  return chunk.toString().split('').reverse().join('')
})).pipe(outStream)

在上面的例子中,從 inStream 傳進來的數(shù)據(jù)會被轉(zhuǎn)換成字符串(如果它不是字符串的話),并且字符會反轉(zhuǎn)處理,然后傳入 outStream。所以,我們這里是做了一個字符串反轉(zhuǎn)器!記??!盡管,數(shù)據(jù)塊(chunk)的大小是由上游(up-stream)所決定的,但是還是可以在這之上對傳進來的數(shù)據(jù)做一點小小的處理的。

要安裝 through2-map,輸入:

$ npm install through2-map

through2-map模塊API文檔

代碼

方法一:

var http = require('http');

http.createServer(function(req,res){
var postData = '';
req.addListener(“data”, function (postDataChunk) {
if(req.method==='POST'){
postData += postDataChunk;
}
});
req.addListener(“end”, function(){
if(req.method==='POST'){
res.end(postData.toUpperCase(),'utf8');
}
});
}).listen(process.argv[2]);

方法二:

var http = require('http')
var map = require('through2-map')

var server = http.createServer(function (req, res) {
if (req.method != 'POST')
return res.end('send me a POST\n')

req.pipe(map(function (chunk) {
return chunk.toString().toUpperCase()
})).pipe(res)
})

server.listen(Number(process.argv[2]))
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號