轻松创建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学习笔记之Connect中间件模块(一)
Jan 27 NodeJs
nodejs实现HTTPS发起POST请求
Apr 23 NodeJs
Nodejs如何复制文件
Mar 09 NodeJs
NodeJS的Promise的用法解析
May 05 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
Nodejs让异步变成同步的方法
Mar 02 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
关于NodeJS中的循环引用详解
Jul 23 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 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
mysql中存储过程、函数的一些问题
2007/02/14 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
php调用淘宝开放API实现根据卖家昵称获取卖家店铺ID的方法
2015/07/29 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
JS删除数组元素的函数介绍
2013/03/27 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
基于JavaScript实现飘落星星特效
2017/08/10 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python查看多台服务器进程的脚本分享
2014/06/11 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
Python2与Python3的区别实例分析
2019/04/11 Python
python写入文件自动换行问题的方法
2019/07/05 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
3.15国际消费者权益日主题活动活动总结
2014/03/16 职场文书
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers