我了解Node.js中路由和使用http模块的基础知识。我理解下面所有的Node.js代码,但仅了解JavaScript API部分,以及如何使用它使路由代码更加简洁,这是我难以理解的。当我说“麻烦理解”时,我的意思是在理解语法以及如何使用route对象时遇到麻烦。
该代码来自我正在学习的一本电子书,因此请阅读下面的代码。
var http = require("http");
var url = require("url");
var route = {
routes : {},
for: function(path, handler){
this.routes[path] = handler;
}
};
route.for("/start", function(request, response){
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello"); response.end();
});
route.for("/finish", function(request, response){
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Goodbye");
response.end();
});
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
if(typeof route.routes[pathname] ==='function'){
route.routes[pathname](request, response);
}else{
response.writeHead(404, {"Content-Type": "text/plain"});
response.end("404 Not Found");
}
}
http.createServer(onRequest).listen(9999);
console.log("Server has started.")
到目前为止,我的理解是:route.routes
是一个空对象,route.for
是一个函数。该函数有两个参数,function(path,handler)
但我不了解该函数的一部分,即this.routes[path] = handler;
根据我的理解,this.routes[path]
是一个空对象,因此代码设置handler
为一个空对象吗?
除此之外,我绝对不知道function onRequest(request,response){};
正在做什么。
Plase为我解释了整个代码,因为我发现在阅读电子书之前无法理解基础知识非常令人不安。
您在第一行中包含的Http模块具有createserver函数,该函数将函数作为参数。在最后几行中,我们将“ onRequest”功能传递给它。每当在端口9999(也已定义)上接收到请求时,http模块都会在内部调用传递的函数。函数onRequest由两个参数调用,一个是“ request”,其中包含诸如标头和已接收请求的正文之类的数据。第二个参数是响应对象,它是返回的内容。它具有简化此功能的功能,如writeHead可以写入标头,.end可以指示http模块最终确定响应。
onRequest函数可以对请求执行任何所需的操作,并发送其想要发送回的任何响应。
在这里,它使用nodejs固有的url模块来解析url并提取路径名,该路径名是first /之后的所有内容,因此提取了www.mydomain.com/thispart/andthis...etc。
然后完成在路由内的对象查找。如果存在具有等于此路径名的字符串的键的对象,它将返回该函数的值,如果不存在,则表达式的计算结果为false并将运行404 part。匹配函数将通过onRequest在参数中获得的响应和请求对象进行调用。
即使对象不存在,也可以在Javascript中设置对象的属性。
var a = {n:1};
a.x = "exists";
console.log (a.x); //exists
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句