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

控制台显示:

node.js-------路由后添加处理函数

浏览器显示:

node.js-------路由后添加处理函数

 

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

http://127.0.0.1:3000/start

控制台显示:

node.js-------路由后添加处理函数

浏览器显示:

node.js-------路由后添加处理函数

  

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

http://127.0.0.1:3000/upload

控制台显示:

node.js-------路由后添加处理函数

浏览器显示:

node.js-------路由后添加处理函数

 

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

http://127.0.0.1:3000/start1

控制台显示:

node.js-------路由后添加处理函数

 

你可能感兴趣的:(node.js)