編寫一個(gè) HTTP 服務(wù)器,每當(dāng)接收到一個(gè)路徑為 '/api/parsetime' 的 GET 請求的時(shí)候,響應(yīng)一些 JSON 數(shù)據(jù)。我們期望請求會(huì)包含一個(gè)查詢參數(shù)(query string),key 是 “iso ,值是 ISO 格式的時(shí)間。
如:
/api/parsetime?iso=2013-08-10T12:10:15.474Z
所響應(yīng)的 JSON 應(yīng)該只包含三個(gè)屬性:'hour','minute' 和 'second'。例如:
{
"hour": 14,
"minute": 23,
"second": 15
}
然后增再加一個(gè)接口,路徑為 '/api/unixtime',它可以接收相同的查詢參數(shù)(query strng),但是它的返回會(huì)包含一個(gè)屬性:'unixtime',相應(yīng)值是一個(gè) UNIX 時(shí)間戳。例如:
{ "unixtime": 1376136615474 }
服務(wù)器需要監(jiān)聽第一個(gè)命令行參數(shù)所指定的端口。
HTTP 服務(wù)器的 request 對象含有一個(gè) url 屬性,你可以通過它來決定具體需要走哪一條”路由”。
可以使用 Node 的核心模塊 'url' 來處理 URL 和 查詢參數(shù)(query string)。url.parse(request.url, true)
?方法會(huì)處理 request.url,它返回的對象中包含了一些很有幫助的屬性,方便方便你處理 querystring。
舉個(gè)例子,可以在命令行窗口輸入以下命令試試:
$ node -pe "require('url').parse('/test?q=1', true)"
服務(wù)器的響應(yīng)應(yīng)該是一個(gè) JSON 字符串的形式。請查看 JSON.stringify() 來獲取更多信息。
為了爭做 Web 世界的好公民,正確地為響應(yīng)設(shè)置 Content-Type 屬性:
res.writeHead(200, { 'Content-Type': 'application/json' })
JavaScript 的 Date 可以將日期以 ISO 的格式展現(xiàn)出來,如:new Date().toISOString()
。并且,如果把一個(gè)字符串傳給 Date的構(gòu)造函數(shù),它也可以幫你將字符串處理成日期類型。另外,Date#getTime() 放個(gè)應(yīng)該也會(huì)很有用。
var http = require('http');
var url = require('url');
var querystring = require('querystring');
http.createServer(function(req,res){
var obj = url.parse(req.url);
var param = querystring.parse(obj.query);
res.writeHead(200, { “Content-Type”: “application/json” });
if(“/api/parsetime”===obj.pathname){
var date = new Date(param.iso);
var retObj = {
hour: date.getHours(),
minute: date.getMinutes(),
second: date.getSeconds()
};
res.end(JSON.stringify(retObj));
}
if('/api/unixtime'===obj.pathname){
var date = new Date(param.iso);
var retObj = {unixtime: date.getTime()};
res.end(JSON.stringify(retObj));
}
}).listen(process.argv[2]);
更多建議: