轻松创建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 win7下安装方法
May 24 NodeJs
nodejs的10个性能优化技巧
Jul 15 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
NodeJS学习笔记之Http模块
Jan 13 NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 NodeJs
nodejs修复ipa处理过的png图片
Feb 17 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
NodeJS如何实现同步的方法示例
Aug 24 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
nodejs中内置模块fs,path常见的用法说明
Nov 07 NodeJs
NodeJs使用webpack打包项目的方法详解
Feb 28 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学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
2019/10/11 PHP
javascript字典探测用户名工具
2006/10/05 Javascript
IE关闭时判断及AJAX注销案例学习
2013/02/18 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
js获取url参数代码实例分享(JS操作URL)
2013/12/13 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
NW.js 简介与使用方法
2018/02/01 Javascript
Vue 源码分析之 Observer实现过程
2018/03/29 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
微信小程序封装分享与分销功能过程解析
2019/08/13 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
[03:24]DOTA2超级联赛专访hao 大翻盘就是逆袭
2013/05/24 DOTA
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
深入理解Python 关于supper 的 用法和原理
2018/02/28 Python
windows下python和pip安装教程
2018/05/25 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
python接口自动化框架实战
2020/12/23 Python
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
企业安全生产标语
2014/06/06 职场文书
从事会计工作年限证明
2015/06/23 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python
redis 存储对象的方法对比分析
2021/08/02 Redis
JavaScript设计模式之原型模式详情
2022/06/21 Javascript