node.js 针对不同的请求路径(url) 做出不同的响应

边看这个边写的: http://wenku.baidu.com/link?url=C4yLe-TVH6060u_x4t34H3Ze8tjoL7HjJaKgH-TvHnEYl-T_gAMYwhmrCeM0Ji59WBPSkoEXPTWk8dPIZVpbFg_by_gN6DJNGYfjlFuYxE_

上篇文章讲到了浏览器中访问 http://127.0.0.1:8888/ 输出 "hello world",  但是实际当中, 用户访问的或许是 http://127.0.0.1:8888/start 异或者 http://127.0.0.1:8888/upload , 那么node.js该如何去针对不同的请求路径(url) 做出不同的响应呢。

要做的事

1.构建一个路由模块

模块作用:提供请求的URL和其他需要的GET及POST参数,随后根据这些数据来执行相应的代码。因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数。

2.构建一个处理请求的程序模块

模块作用:存放不同的处理程序,和请求的URL相对应

3.将前面两个模块和http服务器结合起来

 

一、构建一个 路由 模块

新建一个 router.js 写入

 

// 路由模块,针对不同的请求,做出不同的响应
// handle 处理请求方法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;

 

 

 

二、构建一个处理请求的程序模块

新建一个 requestHandlers.js 写入

// 存放不同的处理程序,和请求的URL相对应
function start() {console.log("Request handler 'start' was called.");
}function upload() {console.log("Request handler 'upload' was called.");
}exports.start = start;
exports.upload = upload;

 

三、将前面两个模块和http服务器结合起来

路由模块的作用是:提供请求的URL和其他需要的GET及POST参数,随后根据这些数据来执行相应的代码。因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数。

我们需要的所有数据都会包含在request对象中,该对象作为onRequest()回调函数的第一个参数传递。但是为了解析这些数据,我们需要额外的Node.JS模块,它们分别是url和querystring模块。

在server.js里面分别引入

url模块:解析url

querystring模块: 解析GET和 POST请求带的参数 (后面再说)

 

修改 server.js

// 请求(require)一个 nodejs 自带的 http模块
// 请求(require)一个 nodejs 自带的 url解析模块
var http = require("http"),url = require("url");// console.log(url);// 调用 http模块 提供的 createServer函数: 
// 返回一个对象,这个对象有一个 listen 方法,这个方法带一个数值参数,
// 指定这个 http 服务器监听的端口号.function start(route, handle) {function onRequest(request, response) {// 获取请求路径var pathname = url.parse(request.url).pathname;// 关闭nodejs 默认访问 favicon.icoif (!pathname.indexOf('/favicon.ico')) {return; };// 收到来自 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 start!");
}// 开放接口
exports.start = start;

 

修改 index.js

var server = require("./server"),router = require("./router"),requestHandlers = require("./requestHandlers");// handle 保存不同请求路径对应的处理方法
var handle = {};handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;// 传入路由模块方法, 路径处理方法
server.start(router.route, handle);

 

四、测试

在 command 面板输入 node index.js 

浏览器访问 http://127.0.0.1:8888/start   command 面板显示

 

整个过程中有个插曲,就是我测试的时候 command面板 每次都会输出一次 访问 /favicon.ico 的记录,然后百度得到了屏蔽的方法
http://cnodejs.org/topic/529be564a6957a0809408cab
在 server.js 中插入

// 关闭nodejs 默认访问 favicon.icoif (!pathname.indexOf('/favicon.ico')) {return; };

 

 

转载于:https://www.cnblogs.com/qiangspecial/p/3595419.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis 为什么需要通用 Mapper ?

版权声明&#xff1a;版权归博主所有&#xff0c;转载请带上本文链接&#xff01;联系方式&#xff1a;abel533gmail.com https://blog.csdn.net/isea533/article/details/83045335 </div>在早期项目文档中有过类似主题的内容…

Oracle教程-安装、结构(一)

本文安装的是Oracle中的11G版本一、 将文件win32_11gR2_database_1of2.zip和win32_11gR2_database_2of2.zip解压。注意&#xff1a;这两个文件解压到同一个目录下&#xff0c;即&#xff1a;将Components目录合并到一起二、 双击“setup.exe”&#xff0c;弹出以下安装向导。去…

SpringBoot视频教程

SpringBoot视频教程 百度云 置顶 2018年08月02日 11:56:26 SoXiaTea 阅读数 8811 SpringBoot视频教程 百度云 史上最全最精辟的SpringBoot视频教程 B站视频地址 https://www.bilibili.com/video/av33985898 百度云保存地址 全网最实用1.5版本SpringBoot教程 链接&#xf…

[041] 微信公众帐号开发教程第17篇-应用实例之智能翻译

内容概要 本篇文章为大家演示怎样在微信公众帐号上实现“智能翻译”&#xff0c;本例中翻译功能是通过调用“百度翻译API”实现的。智能翻译是指用户随意输入想要翻译的内容&#xff08;单词或句子&#xff09;&#xff0c;系统能自己主动识别用户採用的语言&#xff0c;并将其…

读书,上学,上名校!!!!!

摘自读者上的一篇文章 “龟兔赛跑&#xff0c;如果兔子一直在跑&#xff0c;会发生什么....” 原文作者&#xff1a;王凤 一 念高中时&#xff0c;常听班主任提起一个学姐。她几乎不跟周围的人说话&#xff0c;也没什么朋友&#xff0c;直到高考&#xff0c;她考进全省前10名…

思维模式

人生是可以设计的&#xff0c;生涯是可以规划的&#xff0c;幸福是可以准备的。现在就可以开始。在你穷的时候&#xff0c;要少在家里&#xff0c;多在外面。在你富有的时候&#xff0c;要多在家里&#xff0c;少在外面。这就是生活的艺术。穷得时候&#xff0c;钱要花给别人&a…

钉钉上手体会:阿里实用主义的野望

钉钉出自阿里之手&#xff0c;而阿里是电商出身&#xff0c;在移动办公和协同办公方面不算老司机&#xff0c;但钉钉却凭借阿里的背书声称拿下了这个市场的最大份额&#xff0c;甚至超过后面9名的总和&#xff08;数据来源为钉钉官网发布的《2018中国智能移动办公行业趋势报告》…

WAF与IPS的区别总结

谁是最佳选择&#xff1f; Web应用防护无疑是一个热门话题。由于技术的发展成熟和人们对便利性的期望越来越高&#xff0c;Web应用成为主流的业务系统载体。在Web上“安家”的关键业务系统中蕴藏的数据价值引起攻击者的青睐&#xff0c;网上流传的Web漏洞挖掘和攻击工具让攻击的…

企业微信:腾讯的“佛系”办公江湖

、 在协同办公领域&#xff0c;近几年来移动办公伴随着智能手机蓬勃发展起来&#xff0c;特别是腾讯和阿里的入场&#xff0c;改变了业内中小微市场群雄逐鹿的大混战态势&#xff0c;开启了楚汉争霸的局面。相比于钉钉强势的攻城略地&#xff0c;企业微信的“淡定”让人感觉很佛…

for语句中声明变量

在C语言中,局部变量应该在函数的可执行语句之前定义,但在C中变量可在任何语句位置定义,只要允许程序语句的地方,都允许定义变量。 在C99标准中C同C一样允许在for循环语句中定义变量。并且这个变量作用域被限定在for循环中,在for循环外就成为了未定义变量&#xff08;C也是&…

Eclipse安装STS插件

Eclipse安装STS插件 1、下载STS插件 地址&#xff1a;https://spring.io/tools/sts/all/ 最上面是已经安装好STS插件的Eclipse软件&#xff0c;可以点击上图红框中的“previous Spring Tool Suite™ versions”&#xff0c;查看其它版本的Eclipse。下面依次为更新文件、更新站…

转载:CSS hack技巧大全

原文地址&#xff1a;http://www.duitang.com/static/csshack.html part2 —— CSS hack技巧大全 ——作者&#xff1a;吴雷君兼容范围&#xff1a;IE:6.0&#xff0c;FireFox:2.0&#xff0c;Opera 10.0&#xff0c;Sarari 3.0&#xff0c;Chrome参考资料&#xff1a; 各游览器…

Eclipse安装STS插件并解决安装缓慢问题

原 Eclipse安装STS插件并解决安装缓慢问题 2018年11月20日 10:22:29 MyronCham 阅读数 1198 标签&#xff1a; sts 更多 个人分类&#xff1a; 开发工具 Eclipse安装springsource Tool Suite&#xff08;STS)插件&#xff1a;

TextBox控件中只输入整数的几种方法

方法一. if(e.KeyChar!8&&!Char.IsDigit(e.KeyChar)&&e.KeyChar!.) { e.Handled true; } 方法二: if ((e.KeyChar < 48 || e.KeyChar > 57) && (e.KeyChar ! 8) &&e.KeyChar!.) { e.Handled true; } 方法三:if (!Cha…

InvalidCharacterError: Failed to execute 'setAttribute' on 'Element': ')' is not a valid

问题描述&#xff1a; 在webStorm开发angular应用时候 或者vue等&#xff0c;页面没内容&#xff0c;浏览器控制台报错&#xff0c;报诸如题目类似的错误&#xff0c;无误定位性。没找到问题。 查错过程&#xff1a; 1、检查程序有误明显异常 2、检查依赖是否正常 3、检查对应…

Sencha touch API

Sencha touch API http://docs.sencha.com/touch/2.3.1/#!/guide/getting_started 转载于:https://www.cnblogs.com/wuyida/p/6300382.html

eclispe Springboot项目修改html,jsp 页面不能及时刷新

Springboot静态文件不更新的解决办法,以及Springboot实现热部署 正确答案是把菜单 Project > Build Automatically 。&#xff08;之前不知道怎么手瞎把这个给去了&#xff09;。否则再怎么设置缓存&#xff0c;devtools都是白瞎。

Java后台生成NO2016012701(代码+年月日+流水号)这样的流水编号

记录今日较大的点。 参考文章&#xff1a; https://blog.csdn.net/weixin_44538107/article/details/87740611 https://blog.csdn.net/jianqiangdexiaohai/article/details/81240176 项目过程中需要自动生成编号&#xff0c;不在数据库生成&#xff0c;而是在后台代码生成&am…

TFS架构

转载http://www.biaodianfu.com/taobao-tfs.html&#xff0c;感谢原作者标点符。 一、淘宝网的困境 对于淘宝网这样的大型电子商务网站&#xff0c;对于图片服务的要求特别的高。而且对于卖家来说&#xff0c;图片远胜于文字描述&#xff0c;因此卖家也格外看重图片的显示质量、…

(转载)WebStorm 2018.3.2 激活方式(永久)亲测好用!!!!!!

转载链接&#xff1a;https://blog.csdn.net/qq_31279347/article/details/85225234 前言&#xff1a; 总觉的注册码很费事&#xff0c;过一会儿就失效了&#xff0c;博主觉得还是打补丁的方式一劳永逸&#xff0c;很简单&#xff0c;两分钟。 博主版本如下&#xff1a; 第一…