轻松创建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及配置app.js文件的详细步骤
May 11 NodeJs
轻松创建nodejs服务器(10):处理POST请求
Dec 18 NodeJs
浅谈Nodejs观察者模式
Oct 13 NodeJs
NodeJS使用formidable实现文件上传
Oct 27 NodeJs
详解nodejs 文本操作模块-fs模块(三)
Dec 22 NodeJs
Highcharts+NodeJS搭建数据可视化平台示例
Jan 01 NodeJs
nodejs的压缩文件模块archiver用法示例
Jan 18 NodeJs
NodeJS配置HTTPS服务实例分享
Feb 19 NodeJs
nodejs和C语言插入mysql数据库乱码问题的解决方法
Apr 14 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodejs实现超简单生成二维码的方法
Mar 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
ajax缓存问题解决途径
2006/12/06 PHP
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
ThinkPHP令牌验证实例
2014/06/18 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
JavaScript 面向对象编程(1) 基础
2010/05/18 Javascript
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
javascript SpiderMonkey中的函数序列化如何进行
2012/12/05 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
python 处理dataframe中的时间字段方法
2018/04/10 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
pycharm + django跨域无提示的解决方法
2020/12/06 Python
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
北京某公司的.net笔试题
2014/03/20 面试题
售后服务承诺书
2014/03/26 职场文书
2014年班务工作总结
2014/12/02 职场文书
国际贸易实训总结
2015/08/03 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
Go 内联优化让程序员爱不释手
2022/06/21 Golang