轻松创建nodejs服务器(5):事件处理程序


Posted in NodeJs onDecember 18, 2014

为了对不同请做出不同的反馈,我们引入一个事件处理器的模块。

该模块命名为 requestHandlers,我们先添加start() 和 upload()两个占位函数。

requestHandlers.js 代码如下:

function start() {

    console.log("访问/star时调用这个。");

}

 

function upload() {

    console.log("访问/upload时调用这个。");

}

 

exports.start = start;

exports.upload = upload;

在真实的应用中,请求处理程序的数量会不断增加,我们当然不想每次有一个新的URL或请求处理程序时,都要为了在路由里完成请求

到处理程序的映射而反复折腾。

除此之外,我们也不想在在路由里有一大堆if request == x then call handler y,这样会让代码看起来 很杂乱、很不专业的感觉。

这里我将使用关联数组的概念来处理这个需求,我们将一系列请求处理程序通过一个对象来传递,并且需要使用松耦合的方式将这个对象注入到route()函数中。

我们先将这个对象引入到主文件index.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);

比如我想加一个/show的映射,直接添加一句 handle["/show"] requestHandlers.show;就可以了;

哈哈,这样一来代码是不是简洁有秩序多了?!

接下来我们将handle对象传给服务器,server.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);

  response.writeHead(200, {"Content-Type": "text/plain"});

  response.write("Hello World");

  response.end();

 }

 http.createServer(onRequest).listen(8888);

 console.log("Server has started.");

}

exports.start = start;

对应地修改route.js文件中修改route()函数:

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;

我们将handle对象作为参数传给服务器,再由路由接收,最后由路由来判断当前路径对应的请求处理程序存在否,存在的话就调用对应的函数。

我们可以用从关联数组中获取元素一样的方式从传递的对象中获取请求处理函数,因此就有了简洁流畅的形如handle[pathname]();的表达式,这个感觉就像在前方中提到的那样:“嗨,请帮我处理了这个路径”。

这样一来,我们就可以根据不同请求作出不同的处理了。

下一节我们将进一步改造代码,让服务器作出一些实际的反馈操作。

NodeJs 相关文章推荐
Nodejs学习item【入门手上】
May 05 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
nodejs利用ajax实现网页无刷新上传图片实例代码
Jun 06 NodeJs
nodejs开发微信小程序实现密码加密
Jul 11 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
nodejs实现大文件(在线视频)的读取
Oct 16 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
nodeJs的安装与npm全局环境变量的配置详解
Jan 06 NodeJs
nodejs使用socket5进行代理请求的实现
Feb 21 NodeJs
nodejs+express最简易的连接数据库的方法
Dec 23 NodeJs
轻松创建nodejs服务器(4):路由
Dec 18 #NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 #NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
Dec 18 #NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 #NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 #NodeJs
Nodejs实现的一个静态服务器实例
Dec 06 #NodeJs
nodejs中简单实现Javascript Promise机制的实例
Dec 06 #NodeJs
You might like
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
jquery ztree实现下拉树形框使用到了json数据
2014/05/14 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
python获取本机mac地址和ip地址的方法
2015/04/29 Python
python发送邮件功能实现代码
2016/07/15 Python
Python编写通讯录通过数据库存储实现模糊查询功能
2019/07/18 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
关于迟到的检讨书
2014/01/26 职场文书
教师校本培训方案
2014/02/26 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
社会实践活动总结格式
2015/05/11 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书