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

控制台显示:

时间: 2024-11-11 06:01:08

node.js-------路由后添加处理函数的相关文章

Node.js 路由

Node.js 路由 我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码. 因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数.这一功能应当属于路由还是服务器(甚至作为一个模块自身的功能)确实值得探讨,但这里暂定其为我们的HTTP服务器的功能. 我们需要的所有数据都会包含在request对象中,该对象作为onRequest()回调函数的第一个参数传递.但是为了解析这些数据,我们需要额外的Node.JS模块,它们分别是

6:Node.js 路由

原文出自:http://www.w3cschool.cc/nodejs/nodejs-router.html Node.js 路由 我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码. 因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数.这一功能应当属于路由还是服务器(甚至作为一个模块自身的功能)确实值得探讨,但这里暂定其为我们的HTTP服务器的功能. 我们需要的所有数据都会包含在request对象中,该对象作为on

node.js安装后输入“node -v”提示'node' 不是内部或外部命令,也不是可运行的程序的解决方法

换个电脑,重新搭配环境的时候遇到的问题.node.js已经在官网进行下载安装了,但是VScode里面显示不是内部的命令,也不是可运行的程序 但是在cmd控制台还是能查到的 借助网上的方法进行了测试和调配并没有成功,路径我也进行了配置了,不知道是哪里的问题,先在这里凑合着用吧 ps:windows+r----<  输入cmd-------<打开控制台(此处可以使用命令) 网站上的方法: https://blog.csdn.net/KingJulien2/article/details/73302

Node.js:创建应用+回调函数(阻塞/非阻塞)

一.创建应用 如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi.从这个角度看,整个"接收 HTTP 请求并提供 Web 页面"的需求根本不需要 PHP 来处理. 不过对 Node.js 来说,概念完全不一样了.使用 Node.js 时,我们不仅仅在实现一个应用,同时还实现了整个 HTTP 服务器.事实上,我们的 Web 应用以及对应的 Web 服务器基本上是一样的. 在我们创建 Node.js

【node.js】模块系统、函数

为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩展. 创建模块 在 Node.js 中,创建一个模块非常简单,如下我们创建一个 'hello.js' 文件,代码如下: var hello = require('./hello'); hello.world(); 以上实例中,代码 require('./hello') 引入了当前目录下的hello.

node.js安装后出现环境变量错误找不到node

安装node.js和bower之后,运行bower出现/usr/bin/env: 'node': No such file or directory错误 这个错误是由于安装完node.js环境变量并没有设置好,需要手动链接,才可以正常使用. #解决方法 执行一下命令sudo ln -s /usr/bin/nodejs /usr/bin/node

[Node.js] 闭包和高阶函数

原文地址:http://www.moye.me/2014/12/29/closure_higher-order-function/ 引子 最近发现一个问题:一部分写JS的人,其实对于函数式编程的概念并不是太了解.如下的代码片断,常常让他们觉得不可思议: OAuth2Server.prototype.authCodeGrant = function (check) { var self = this; return function (req, res, next) { new AuthCodeG

node.js学习笔记之调用函数

本文件和从其它模块引入函数: 从其他模块引入分只支持引入一个函数和多个  这两种 例: test.js为主函数 var http=require('http'); http.createServer(function (request,response){ response.writeHead(200,{'Content-Type':'text/html'}) func1(response);//调用内部 otherfun.func3(response);//调用外部函数 console.log

NODE JS 与 PHP 文件操作函数对比

原文地址:http://blog.51cto.com/12173069/2090055