轻松创建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 后缀名判断限制代码
Mar 31 NodeJs
nodejs win7下安装方法
May 24 NodeJs
windows系统下简单nodejs安装及环境配置
Jan 08 NodeJs
Nodejs如何复制文件
Mar 09 NodeJs
NodeJS和BootStrap分页效果的实现代码
Nov 07 NodeJs
Nodejs中crypto模块的安全知识讲解
Jan 03 NodeJs
Nodejs下使用gm圆形裁剪并合成图片的示例
Feb 22 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
nodejs中的异步编程知识点详解
Jan 17 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
xajax写的留言本
2006/11/25 PHP
php 读取文件乱码问题
2010/02/20 PHP
在windows服务器开启php的gd库phpinfo中未发现
2013/01/13 PHP
探讨php中header的用法详解
2013/06/07 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
学习ExtJS border布局
2009/10/08 Javascript
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
JavaScript 10件让人费解的事情
2010/02/15 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
基于JavaScript实现图片剪切效果
2017/03/07 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
咖啡厅创业计划书范本
2014/01/22 职场文书
四年级下册教学反思
2014/02/01 职场文书
售后求职信范文
2014/03/15 职场文书
大学生求职信
2014/06/17 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
关于安全的广播稿
2014/10/23 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
小学体育队列队形教学反思
2016/02/16 职场文书