轻松创建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中exports与module.exports的区别详细介绍
Jan 14 NodeJs
NodeJS中Buffer模块详解
Jan 07 NodeJs
NodeJS学习笔记之Connect中间件应用实例
Jan 27 NodeJs
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
Sep 18 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
nodejs使用http模块发送get与post请求的方法示例
Jan 08 NodeJs
nodeJs实现基于连接池连接mysql的方法示例
Feb 10 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
php使用正则表达式去掉html中的注释方法
2016/11/03 PHP
php 运算符与表达式详细介绍
2016/11/30 PHP
php数组和链表的区别总结
2019/09/20 PHP
php post换行的方法
2020/02/03 PHP
js实时监听文本框状态的方法
2011/04/26 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
js插件dropload上拉下滑加载数据实例解析
2016/07/27 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
微信小程序商品到详情的实现
2017/06/27 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
vue中watch和computed的区别与使用方法
2020/08/23 Javascript
Python基于百度AI的文字识别的示例
2018/04/21 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
致长跑运动员广播稿
2014/01/31 职场文书
深入开展党的群众路线教育实践活动方案
2014/02/04 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
班级班风口号大全
2015/12/25 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers