zoukankan      html  css  js  c++  java
  • node.js-------路由后添加处理函数

    路由,就是不同的URL有不同的处理方式,例如/start的“业务逻辑”和/upload的不同。

    在现在的现实下,路由过程会在路由模块中“结束”,并且路由模块并不是真正针对请求采取行动的处理程序模块,所以,当处理程序变更时,需要修改的内容不用涉及到路由。

    通常在请求处理程序就绪的时候设置路由。

    当应用程序需要新的部件,就需要加入新的模块。可以创建一个requestHandlers的模块,并对每一请求处理程序,添加一个占位函数,随后这些占位函数作为模块导出。

    下面是一个例子:

    ------requestHandlers.js

    ------router.js

    ------server.js

    ------index.js

    requestHandlers.js

    /*requestHandlers.js模块,对每一个请求处理程序添加一个占位函数,最后将这些方法作为模块导出*/
    function start(){
    	console.log("Request handler 'start' was called.");
    }
    function upload(){
    	console.log("Request handler 'upload' was called.");
    }
    exports.start = start;
    exports.upload = upload;
    

    router.js

    /*router模块*/
    /*检查URL中给定路径对应的请求处理程序是否存在,如果存在直接调用相应函数*/
    function route(handle, pathname){
    	console.log("About to route a request for" + pathname);
    	if(typeof handle[pathname] === 'function'){
    		handle[pathname]();
    	}else{
    		console.log("No request handler found for" + pathname);
    	}
    }
    exports.route = route;
    

    server.js  

    /*server模块*/
    /*请求处理模块,从URL中取出路径,并交由router.js检查这个路径有没有对应的处理函数*/
    var http = require("http");
    var url = require("url");
    
    function start(route, handle){
    	function onRequest(request, response){
    		var pathname = url.parse(request.url).pathname;
    		console.log("Request for" + pathname + "received");
    		
    		route(handle, pathname);
    		//在这里就可以对不同的路径进行不同的处理
    		//if(pathname=="...") response.writeHead不同的信息之类的
    		if(pathname=="/"){
    			response.writeHead(200,{"Content-Type":"text/plain"});
    			response.write("pathname: /");		
    			response.end();
    		}
    		if(pathname=="/start"){
    			response.writeHead(200,{"Content-Type":"text/plain"});
    			response.write("pathname: /start");		
    			response.end();
    		}
    		if(pathname=="/upload"){
    			response.writeHead(200,{"Content-Type":"text/plain"});
    			response.write("pathname: /upload");		
    			response.end();
    		}
    	}
    	
    	http.createServer(onRequest).listen(3000);
    	console.log("Server has started");
    	
    }
    

      

    index.js

    /*index 模块*/
    /*启动模块,主模块,handle集合对象里面,是pathname与处理函数组成的数组元素集合,这个集合也是router.js里面进行检查的依据*/
    
    var server = require("./server");
    var router = require("./router");
    
    var requestHandlers = require("./requestHandlers");
    
    var handle = {}
    handle["/"] = requestHandlers.start;
    handle["/start"] = requestHandlers.start;
    handle["/upload"] = requestHandlers.upload;
    
    server.start(router.route,handle);
    

     

    控制台启动应用:

    node index.js
    

      

    在浏览器输入以下URL请求:

    http://127.0.0.1:3000
    

    控制台显示:

    浏览器显示:

     

     在浏览器输入以下URL请求:

    http://127.0.0.1:3000/start
    

    控制台显示:

    浏览器显示:

      

    在浏览器输入以下URL请求:

    http://127.0.0.1:3000/upload
    

    控制台显示:

    浏览器显示:

    在浏览器输入以下URL请求:

    http://127.0.0.1:3000/start1
    

    控制台显示:

  • 相关阅读:
    Python爬虫之-动态网页数据抓取
    Python爬虫之 正则表达式和re模块
    Python爬虫 XPath语法和lxml模块
    Python 多线程爬虫
    PAT 1037 在霍格沃茨找零钱
    PAT 1033 旧键盘打字
    PAT 1019 数字黑洞
    PAT 1057 数零壹
    PAT 1026 程序运行时间
    PAT 1023 组个最小数
  • 原文地址:https://www.cnblogs.com/IanI/p/3990848.html
Copyright © 2011-2022 走看看