轻松创建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 相关文章推荐
使用forever管理nodejs应用教程
Jun 03 NodeJs
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
Nodejs 搭建简单的Web服务器详解及实例
Nov 30 NodeJs
mac下的nodejs环境安装的步骤
May 24 NodeJs
详解nodejs实现本地上传图片并预览功能(express4.0+)
Jun 28 NodeJs
使用Nodejs连接mongodb数据库的实现代码
Aug 21 NodeJs
nodejs 最新版安装npm 的使用详解
Jan 18 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
Nodejs实现图片上传、压缩预览、定时删除功能
Oct 25 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过程中的一些注意点的总结
2013/10/25 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
使用Json比用string返回数据更友好,也更面向对象一些
2011/09/13 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
新版小程序登录授权的方法
2018/12/12 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
Python中Unittest框架的具体使用
2019/08/27 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
python mongo 向数据中的数组类型新增数据操作
2020/12/05 Python
python基于win32api实现键盘输入
2020/12/09 Python
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
高级护理专业大学生求职信
2013/10/24 职场文书
省优秀教师事迹材料
2014/01/30 职场文书
社区文艺活动方案
2014/08/19 职场文书
2014年教研室工作总结
2014/12/06 职场文书
商务邀请函
2015/01/30 职场文书