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
    

    控制台显示:

  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/IanI/p/3990848.html
Copyright © 2011-2022 走看看