摘要:启动脚本在最后,我们调用了模块,模块即文件。调用路由对应的方法模块中判断参数和组合成的路径是否有实现。负责启动服务,解析传递过来的路径,将传递给。进行真正的路由处理。这样,我们就手动实现了一个路由控制的示例。
上一节我们实现了简单的路由,这节我们实现更复杂的路由过程
统一管理
我们在server.js初始化路由控制,启动脚本的模块。
var server = require("./start"); var router = require("./router"); var requestHandlers = require("./handlers"); var handler = []; handler["/"] = requestHandlers.home; handler["/show"] = requestHandlers.show; handler["/upload"] = requestHandlers.upload; server.start(router.route,handler); console.log("Run on port 1337");
启动脚本
在server.js最后,我们调用了start模块,start模块即start.js文件。在start.js文件中处理,代码如下
var http = require("http"); var url = require("url"); function start(route,handler) { console.log("Starting~~"); function onRequest(req, res) { var pathname = url.parse(req.url).pathname; var content = route(pathname,handler); if (content){ res.writeHead(200,{ "Content-Type":"text/plain" }); res.write("OK"); res.end(); }else { res.writeHead(404,{ "Content-Type":"text/plain" }); res.write("404 not found"); res.end(); } } var port = process.env.port || 1337; http.createServer(onRequest).listen(port); console.log("Started!!"); } exports.start = start;
这里的核心代码是调用router(pathname,handler);这个方法,这个方法是在router模块中实现。
调用路由对应的方法
router模块中判断参数pathname和handler组合成的路径是否有实现。如果有,则调用相应的路由方法,router.js代码如下
function route(pathname,handler) { console.log("Route for path requested:" + pathname); if (pathname == undefined) pathname="/"; if (handler){ if (typeof handler[pathname] === "function"){ handler[pathname](); return true; }else { console.log("No Method found for " + pathname); return null; } }else { console.log("No Method found in handler "); return null; } } exports.route = route;
多个路由方法
首先我们需要定义多个路由方法,为了方便统一的管理控制,我们将路由处理的方法都写在一个handlers.js的文件中,首先定义三个方法,这里只是实现最简单的打印
function home() { console.log("Request "home" called."); } function show() { console.log("Request "show" called."); } function upload() { console.log("Request "upload" called."); } exports.home = home; exports.show = show; exports.upload = upload;
最后
我们在浏览器中输入http://127.0.0.1:1337/和http://127.0.0.1:1337/show,可以看到浏览器页面显示OK,命令行打印相应的log.
在项目中:
1.server.js预定义处理路由方法,然后调用启动服务器的方法(start.js)。
2.start.js负责启动服务,解析url传递过来的路径,将url传递给router.js。
3.router.js去判断路由是否正确,然后调用对应url的处理方法,处理方法实现在handlers.js。
4.handlers.js进行真正的路由处理。
这样,我们就手动实现了一个nodejs路由控制的示例。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/18963.html
摘要:启动脚本在最后,我们调用了模块,模块即文件。调用路由对应的方法模块中判断参数和组合成的路径是否有实现。负责启动服务,解析传递过来的路径,将传递给。进行真正的路由处理。这样,我们就手动实现了一个路由控制的示例。 上一节我们实现了简单的路由,这节我们实现更复杂的路由过程 统一管理我们在server.js初始化路由控制,启动脚本的模块。 var server = require(./star...
摘要:前端每周清单年度总结与盘点在过去的八个月中,我几乎只做了两件事,工作与整理前端每周清单。本文末尾我会附上清单线索来源与目前共期清单的地址,感谢每一位阅读鼓励过的朋友,希望你们能够继续支持未来的每周清单。 showImg(https://segmentfault.com/img/remote/1460000010890043); 前端每周清单年度总结与盘点 在过去的八个月中,我几乎只做了...
摘要:如果说用一句话来概括那就是它开启了服务器端语言。系列的文章并不会从一开始长篇概论的讲的历史,安装,以及其他很琐碎的事情。只会专门介绍关于或者准确来讲是关于的敏捷开发。性能不对已有的特性进行二次抽象,我们只是在它之上扩展了应用所需的基本功能。 如果说用一句话来概括Node那就是:它开启了JavaScript服务器端语言。 Node系列的文章并不会从一开始长篇概论的讲Node的历史,安装,...
摘要:但是为什么执行的更快呢在这个系列文章中,我会为你解释这一点。所以当人们说更快的时候,一般来讲是与相比而言的。被人们广为传播的性能大战在年打响。性能的提升使得的应用范围得到很大的扩展。现在通过,我们很有可能正处于第二个拐点。 作者:Lin Clark 编译:胡子大哈 翻译原文:http://huziketang.com/blog/posts/detail?postId=58ce8036...
阅读 1167·2021-11-24 09:38
阅读 2567·2021-09-27 14:00
阅读 1126·2019-08-30 15:55
阅读 1312·2019-08-30 14:16
阅读 1455·2019-08-30 10:54
阅读 2840·2019-08-28 17:58
阅读 724·2019-08-26 13:22
阅读 1186·2019-08-26 12:01