轻松创建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实现黑名单中间件设计
Jun 17 NodeJs
nodejs教程之制作一个简单的文章发布系统
Nov 21 NodeJs
NodeJS学习笔记之(Url,QueryString,Path)模块
Jan 13 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
详解nodejs 文本操作模块-fs模块(四)
Dec 22 NodeJs
nodejs+express实现文件上传下载管理网站
Mar 15 NodeJs
nodejs后台集成ueditor富文本编辑器的实例
Jul 11 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
Nodejs中怎么实现函数的串行执行
Mar 02 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 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
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
php连接mssql的一些相关经验及注意事项
2013/02/05 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
javascript数组随机排序实例分析
2015/07/22 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
JS数组实现分类统计实例代码
2018/09/30 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
python脚本后台执行方式
2019/12/21 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
英国综合网上购物商城:The Hut
2018/07/03 全球购物
司机的工作范围及职责
2013/11/13 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
个人自我鉴定写法
2013/11/30 职场文书
车间统计员岗位职责
2014/01/05 职场文书
档案检查欢迎词
2014/01/13 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
感恩教育主题班会
2015/08/12 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
动作冒险《Hell Is Us》将采用虚幻5 消灭怪物探索王国
2022/04/13 其他游戏