Javascript HTTP JSON API服务器中的这段代码在LearnyYouNode中执行了什么 上下文

Javascript HTTP JSON API服务器中的这段代码在LearnyYouNode中执行了什么 上下文,javascript,json,node.js,api,http,Javascript,Json,Node.js,Api,Http,我在Learnyonode遇到过锻炼 称为HTTP JSON API服务器。 练习的目标: 编写一个HTTP服务器,当它接收到路径“/api/parsetime”的GET请求时,为JSON数据提供服务。期望请求包含一个 以键“iso”和iso格式时间作为值的查询字符串 例如: /api/parsetime?iso=2013-08-10T12:10:15.474Z 我无法解决它,我认为这是由于缺乏一些特定的API知识,所以我查找了一个解决方案,发现了这个(顺便说一句,它工作得很好): var h

我在Learnyonode遇到过锻炼

称为HTTP JSON API服务器。 练习的目标:

编写一个HTTP服务器,当它接收到路径“/api/parsetime”的GET请求时,为JSON数据提供服务。期望请求包含一个 以键“iso”和iso格式时间作为值的查询字符串

例如:

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

我无法解决它,我认为这是由于缺乏一些特定的API知识,所以我查找了一个解决方案,发现了这个(顺便说一句,它工作得很好):

var http=require('http');
var url=require('url');
函数解析时间(time){
返回{
小时:time.getHours(),
分钟:time.getMinutes(),
秒:time.getSeconds()
};
}
函数unixtime(时间){
返回{unixtime:time.getTime()};
}
var server=http.createServer(函数(req,res){
var parsedUrl=url.parse(req.url,true);
var time=新日期(parsedUrl.query.iso);
var结果;
if(/^\/api\/parsetime/.test(req.url))
结果=解析时间(time);
else if(/^\/api\/unixtime/.test(req.url))
结果=unixtime(时间);
如果(结果){
res.writeHead(200,{'Content-Type':'application/json'});
res.end(JSON.stringify(result));
}否则{
书面记录(404);
res.end();
}
})
listen(编号(process.argv[2])看起来好像

if (/^\/api\/parsetime/.test(req.url))
    result = parsetime(time);
else if (/^\/api\/unixtime/.test(req.url))
    result = unixtime(time);
正在调用函数,但它只是生成一个字符串输出,实际调用程序调用.test()将其转换为真实表达式

有关javascript正则表达式的更多信息,请查看说明:

编写一个HTTP服务器,当它接收到对路径“/api/parsetime”的GET请求时提供JSON数据(…)将第二个端点添加到路径“/api/UnixtTime”

这意味着服务器获取的GET请求可以指向“/api/parsetime”(resp./api/unixtime)”以外的路径

因此,您需要测试服务器获取的GET请求是否指向上述两条路径之一。您可以使用regexp来实现这一点。根据给定的2个URL检查URL的一种简单方法是使用test()方法

请参见MDN上的regexp示例:

在:

if语句中的第一个“
/
”字符表示JavaScript中regex对象的开头,并以另一个“
/
”字符结尾。因此,例如,
/a/.test('a')
将计算为
true

正则表达式中的“
^
”字符只表示正则表达式中的第一个字符,“
\/
”是因为“
/
”是一个以正则表达式结尾的特殊字符,而前面的“
\
”是另一个特殊字符,可以抵消特殊字符,因此使用“
\/
”我们以文字结尾“
/
”作为搜索模式中的第一个(“
^
”)字符

因此,在上面的正则表达式中,
/^\/api\/parsetime/
通过取消“
/
”字符来保持模式。前面的“
^
”表示我们需要以文本“
/
”开头。然后我们像往常一样以“
/
”结束正则表达式

正则表达式和其他特殊字符可在此处找到:

是的,它用于标识URL路径。
if (/^\/api\/parsetime/.test(req.url))
    result = parsetime(time);
else if (/^\/api\/unixtime/.test(req.url))
    result = unixtime(time);
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)