轻松创建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服务器(3):代码模块化
Dec 18 NodeJs
nodejs中全局变量的实例解析
Mar 07 NodeJs
nodejs读写json文件的简单方法(必看)
Mar 09 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
NodeJs的fs读写删除移动监听
Apr 28 NodeJs
详解nodejs微信jssdk后端接口
May 25 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 NodeJs
NodeJS开发人员常见五个错误理解
Oct 14 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对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
jquery、js操作checkbox全选反选
2014/03/12 Javascript
JQuery替换DOM节点的方法
2015/06/11 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
终于实现了!精彩的jquery弹幕效果
2016/07/18 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Python实现字符型图片验证码识别完整过程详解
2019/05/10 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
python3.6+selenium实现操作Frame中的页面元素
2019/07/16 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
2013年入党人员的自我鉴定
2013/10/25 职场文书
幼儿园六一儿童节主持节目串词
2014/03/21 职场文书
人力资源职位说明书
2014/07/29 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
家属答谢词
2015/01/05 职场文书
《去年的树》教学反思
2016/02/18 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python