Node.js 路由的实现方法


Posted in Javascript onJune 05, 2019

我们平时工作中,涉及到后台开发,路由基本上是我们第一个需要建的,路由还是很重要的。

那么,什么是路由呢,通俗点举个例子,一个宾馆前台,来了十位客人,前台会安排十位客人入住,每位客人到达宾馆以后,该去哪个房间,都是通过前台来安排。(别喷我)

在一个域名下,会有很多个可访问的地址,这就是路由。

我们呢,要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据,来决定执行哪些代码。/
因此,我们要查看HTTP请求,从中提取出来我们需要的URL以及GET/POST参数。
我们需要的这些数据都会包含在request对象中,该对象作为onRequest()回调函数的第一个参数传递。但是为了解析这些数据,我们需要额外的Node.js模块,它们分别是url和querystring模块。

url.parse(string).query
                      |
      url.parse(string).pathname   |
            |          |
            |          |
           ------ -------------------
http://localhost:8888/start?foo=bar&hello=world
                ---    -----
                 |     |
                 |     |
       querystring.parse(queryString)["foo"]  |
                      |
             querystring.parse(queryString)["hello"]

也可以用querystring模块来解析post请求体中的参数,下面会有代码演示。

现在我们写一段代码,用来找出浏览器请求的URL路径 之前也写到如何用node起serve

我们新建一个server.js 代码如下

// 代码route()方法为第二个创建的router.js那的方法。我们在这里使用
const http = require('http')
const url = require('url')

function start(route){
  function onRequest(request, response) {
    let pathName = url.parse(request.url).pathname // 通过url获取到当前访问路径
    console.log('Request for ' + pathName + 'received.')
    route(pathName,response)
  }
  http.createServer(onRequest).listen(8888)
  console.log('Server has started')
}
exports.start = start

然后创建router.js

// 通过传递过来到pathname,来进行不同的操作,如果是根目录,打印hello world
// 如果是/index 打印 pathname :/index
// 如果是其他 打印404
function route(pathname,response) {
  console.log('About to route a request for ' + pathname)
  response.writeHead(200, {'Content-Type' : 'text/plain'})
  if(pathname == '/') {
    response.write('Hello World')
    response.end()
  }else if(pathname == '/index'){
    response.write('pathname :/index')
    response.end()
  } else {
    response.write('404')
    response.end()
  }
  
}
exports.route = route

真实环境肯定不会这么写,这样写主要是理解路由的工作原理

接下来我们创建index.js 倒入我们写好的两个模块。

const server = require('./server')
const router = require('./router')

server.start(router.route)

调用server下的start方法,把router那的route方法传入进去。整体的逻辑就出来了,通过server.js 创建http服务,通过node内置模块url获取到当前访问路径,在通过router.js 对不同访问路径进行不同对代码操作。

最终我们启动命令行 输入node index.js 随后请求一个url 我们就会看到应用输出相应对信息,这表明我们对HTTP服务器已经在使用路由模块了。并会将请求对路径传递给路由,再由路由进行接下来对操作。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery入门—访问DOM对象方法
Jan 07 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
Nov 21 Javascript
jQuery判断复选框是否勾选的原理及示例
May 21 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
Mar 04 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
Sep 27 Javascript
全面解析Bootstrap表单使用方法(表单样式)
Nov 24 Javascript
开启BootStrap学习之旅
May 04 Javascript
BootStrap给table表格的每一行添加一个按钮事件
Sep 07 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
分析JavaScript数组操作难点
Dec 18 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
Mar 17 Javascript
python实现迭代法求方程组的根过程解析
Nov 25 Javascript
JS实现动态添加外部js、css到head标签的方法
Jun 05 #Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
Jun 05 #Javascript
jQuery操作cookie的示例代码
Jun 05 #jQuery
JS实现从对象获取对象中单个键值的方法示例
Jun 05 #Javascript
微信小程序如何实现全局重新加载
Jun 05 #Javascript
JS数组Object.keys()方法的使用示例
Jun 05 #Javascript
express + jwt + postMan验证实现持久化登录
Jun 05 #Javascript
You might like
世界第一个无线广播电台 KDKA
2021/03/01 无线电
php cookie的操作实现代码(登录)
2010/12/29 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
Joomla使用Apache重写模式的方法
2016/05/04 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
js不是基础的基础
2006/12/24 Javascript
jQuery EasyUI API 中文文档 - Spinner微调器使用
2011/10/21 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
zTree插件之单选下拉菜单实例代码
2013/11/07 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
Vee-Validate的使用方法详解
2017/09/22 Javascript
微信小程序wx:for和wx:for-item的用法详解
2018/04/01 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python中extend和append的区别讲解
2019/01/24 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
python实现列表的排序方法分享
2019/07/01 Python
python getpass模块用法及实例详解
2019/10/07 Python
基于Python和PyYAML读取yaml配置文件数据
2020/01/13 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
京东奢侈品:全球奢侈品牌
2018/03/17 全球购物
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
企业文化标语大全
2014/06/10 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
先进事迹演讲稿
2014/09/01 职场文书
普通党员整改措施
2014/10/24 职场文书
扬州个园导游词
2015/02/06 职场文书