轻松创建nodejs服务器(4):路由


Posted in NodeJs onDecember 18, 2014

服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤。

第一步我们需要先解析出请求URL的路径,我们引入url模块。

我们来给onRequest()函数加上一些逻辑,用来找出浏览器请求的URL路径:

var http = require("http");

var url = require("url");

function start() {

 function onRequest(request, response) {

  var pathname = url.parse(request.url).pathname;

  console.log("Request for " + pathname + " received.");

  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;

好了,pathname就是请求的路径,我们可以用它来区别不同请求了,这样一来我们就可以对来自/start和/upload的请求使用不同的代码来处理。

接着我们来编写路由,建立一个名为router.js的文件,代码如下:

function route(pathname) {

 console.log("About to route a request for " + pathname);

}

exports.route = route;

这段代码什么都没干,我们先把路由和服务器整合起来。

我们接着扩展服务器的start()函数,在start()中运行路由函数,并将pathname作为参数传给它。

var http = require("http");

var url = require("url");

function start(route) {

 function onRequest(request, response) {

  var pathname = url.parse(request.url).pathname;

  console.log("Request for " + pathname + " received.");

  route(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;

同时,我们会相应扩展index.js,使得路由函数可以被注入到服务器中:

var server = require("./server");

var router = require("./router");

server.start(router.route);

运行index.js,随便访问个路径,比如/upload,就会发现控制台输出,About to route a request for /upload.

这就意味着我们的HTTP服务器和请求路由模块已经可以相互交流了。

下一节我们将实现针对不同的URL请求给予不同的反馈。

NodeJs 相关文章推荐
Nodejs+express+html5 实现拖拽上传
Aug 08 NodeJs
解析NodeJs的调试方法
Dec 11 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
Apr 27 NodeJs
NodeJs安装npm包一直失败的解决方法
Apr 28 NodeJs
nodejs中sleep功能实现暂停几秒的方法
Jul 12 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
nodejs实现一个word文档解析器思路详解
Aug 14 NodeJs
nodejs高大上的部署方式(PM2)
Sep 11 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 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
nodejs实现的一个简单聊天室功能分享
Dec 06 #NodeJs
You might like
php下将XML转换为数组
2010/01/01 PHP
ThinkPHP3.1新特性之内容解析输出详解
2014/06/19 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
类之Prototype.js学习
2007/06/13 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
2017/02/03 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
解决element-ui中下拉菜单子选项click事件不触发的问题
2018/08/22 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python 实现一行输入多个值的方法
2018/04/21 Python
python 循环数据赋值实例
2019/12/02 Python
使用Python实现牛顿法求极值
2020/02/10 Python
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
数控加工专业毕业生自荐信
2013/09/27 职场文书
司机辞职报告范文
2014/01/20 职场文书
经营目标管理责任书
2014/07/25 职场文书
机械设备与数控技术专业求职信
2014/08/10 职场文书
趣味运动会广播稿
2014/09/13 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
2014年学生工作总结
2014/11/20 职场文书
出纳试用期自我评价
2015/03/10 职场文书
投诉信格式范文
2015/07/02 职场文书
汽车修理厂管理制度
2015/08/05 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
世界十大狙击步枪排行榜
2022/03/20 杂记