## 要求
編寫一個 HTTP 服務器,每當接收到一個路徑為 '/api/parsetime' 的 GET 請求的時候,響應一些 JSON 數據。我們期望請求會包含一個查詢參數(query string),key 是 “iso ,值是 ISO 格式的時間。
如:
~~~
/api/parsetime?iso=2013-08-10T12:10:15.474Z
~~~
所響應的 JSON 應該只包含三個屬性:'hour','minute' 和 'second'。例如:
~~~
{
"hour": 14,
"minute": 23,
"second": 15
}
~~~
然后增再加一個接口,路徑為 '/api/unixtime',它可以接收相同的查詢參數(query strng),但是它的返回會包含一個屬性:'unixtime',相應值是一個 UNIX 時間戳。例如:
~~~
{ "unixtime": 1376136615474 }
~~~
服務器需要監聽第一個命令行參數所指定的端口。
## 提示
HTTP 服務器的 request 對象含有一個 url 屬性,你可以通過它來決定具體需要走哪一條”路由”。
可以使用 Node 的核心模塊 'url' 來處理 URL 和 查詢參數(query string)。`url.parse(request.url, true)`?方法會處理 request.url,它返回的對象中包含了一些很有幫助的屬性,方便方便你處理 querystring。
舉個例子,可以在命令行窗口輸入以下命令試試:
~~~
$ node -pe "require('url').parse('/test?q=1', true)"
~~~
服務器的響應應該是一個 JSON 字符串的形式。請查看 JSON.stringify() 來獲取更多信息。
為了爭做 Web 世界的好公民,正確地為響應設置 Content-Type 屬性:
~~~
res.writeHead(200, { 'Content-Type': 'application/json' })
~~~
JavaScript 的 Date 可以將日期以 ISO 的格式展現出來,如:`new Date().toISOString()`。并且,如果把一個字符串傳給 Date的構造函數,它也可以幫你將字符串處理成日期類型。另外,Date#getTime() 放個應該也會很有用。
[url模塊API文檔](https://nodejs.org/api/url.html)
## 代碼
~~~
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]);
~~~