2015-10-18 30 views
0

語境

我在learnyounode這是什麼片段在HTTP JSON API服務器鍛鍊; Tibial在learnyounode

npm install -g learnyounode 

稱爲HTTP JSON API服務器遇到鍛鍊; Tibial。 目標的鍛鍊; Tibial的:

收件,供應JSON數據當它接收一個GET請求到路徑「/ API /分析時」的HTTP服務器。期望請求包含一個帶有'iso'鍵和一個ISO格式時間值的 查詢字符串。

例如:

/api/parsetime?iso=2013-08-10T12:10:15.474Z

我沒能解決這個問題,我認爲這是由於缺乏一些特定的API的知識,於是我擡起頭來的解決方案,並發現這個(這順便說一句正常工作):

var http = require('http'); 
 
var url = require('url'); 
 

 
    function parsetime (time) { 
 
     return { 
 
     hour: time.getHours(), 
 
     minute: time.getMinutes(), 
 
     second: time.getSeconds() 
 
     }; 
 
    } 
 

 
    function unixtime (time) { 
 
     return { unixtime : time.getTime() }; 
 
    } 
 

 
    var server = http.createServer(function (req, res) { 
 
     var parsedUrl = url.parse(req.url, true); 
 
     var time = new Date(parsedUrl.query.iso); 
 
     var result; 
 

 
     if (/^\/api\/parsetime/.test(req.url)) 
 
     result = parsetime(time); 
 
     else if (/^\/api\/unixtime/.test(req.url)) 
 
     result = unixtime(time); 
 

 
     if (result) { 
 
     res.writeHead(200, { 'Content-Type': 'application/json' }); 
 
     res.end(JSON.stringify(result)); 
 
     } else { 
 
     res.writeHead(404); 
 
     res.end(); 
 
     } 
 
    }) 
 
    
 
    server.listen(Number(process.argv[2]));

實際問題

我看着這段代碼並凍結了。

if (/^\/api\/parsetime/.test(req.url)) 
     result = parsetime(time); 
else if (/^\/api\/unixtime/.test(req.url)) 
     result = unixtime(time); 

任何人都可以解釋/^\/api\/parsetime/.test(req.url)究竟做了什麼嗎?起初它看起來像某種正則表達式,但我從來沒有見過RegExp可以調用方法。我想這是識別URL路徑的一種形式,但猜測在行業中並不值得。

謝謝大家提前!

+0

是的,它是用於識別所述URL的路徑[RegExp.test()](https://developer.mozilla.org/en-美國/文檔/網絡/的JavaScript /參考/ Global_Objects /正則表達式/測試)。 – simo

回答

0

的指示說:

當它收到一個GET請求路徑「/ API /分析時編寫用於JSON數據的HTTP服務器「(...)添加第二端點到路徑‘/ API/unixtime’

這意味着GET請求服務器獲取可以是比其他路徑‘/ API /分析時’(分別是」/API/unixtime')

所以,你想測試服務器獲取的GET請求是否是提到的兩個路徑之一。你用正則表達式來做。根據給定的URL來檢查URL的簡單方法是使用test()方法。

參見MDN的regexp的例子:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

-1
var http = require('http') 
var url = require('url') 

function parsetime (time) { 
    return { 
    hour: time.getHours(), 
    minute: time.getMinutes(), 
    second: time.getSeconds() 
    } 
} 

function unixtime (time) { 
    return { unixtime: time.getTime() } 
} 

var server = http.createServer(function (req, res) { 
    var parsedUrl = url.parse(req.url, true) 
    var time = new Date(parsedUrl.query.iso) 
    var result 

    if (/^\/api\/parsetime/.test(req.url)) { 
    result = parsetime(time) 
    } else if (/^\/api\/unixtime/.test(req.url)) { 
    result = unixtime(time) 
    } 

    if (result) { 
    res.writeHead(200, { 'Content-Type': 'application/json' }) 
    res.end(JSON.stringify(result)) 
    } else { 
    res.writeHead(404) 
    res.end() 
    } 
}) 
server.listen(Number(process.argv[2]))