轻松创建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极简入门教程(三):进程
Oct 27 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
利用nodeJs anywhere搭建本地服务器环境的方法
May 12 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
nodejs异步编程基础之回调函数用法分析
Dec 26 NodeJs
nodejs提示:cross-device link not permitted, rename错误的解决方法
Jun 10 NodeJs
独立部署小程序基于nodejs的服务器过程详解
Jun 24 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 开发工具
2006/12/06 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
php微信公众号开发之关键词回复
2018/10/20 PHP
PHP实现简单的协程任务调度demo示例
2020/02/01 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
Vue.js 的移动端组件库mint-ui实现无限滚动加载更多的方法
2017/12/23 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
小程序多图列表实现性能优化的方法步骤
2019/05/28 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
Python脚本处理空格的方法
2016/08/08 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
关于python中密码加盐的学习体会小结
2019/07/15 Python
python3让print输出不换行的方法
2020/08/24 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
药品业务员岗位职责
2014/04/17 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
党员公开承诺书内容
2014/05/20 职场文书
年度考核个人总结
2015/03/06 职场文书
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB