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 相关文章推荐
javascript 不间断的图片滚动并可点击
Jan 15 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
Apr 01 Javascript
C#中使用迭代器处理等待任务
Jul 13 Javascript
JavaScript弹窗基础篇
Apr 27 Javascript
Bootstrap3制作图片轮播效果
May 12 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
Jun 21 Javascript
浅谈AngularJS中使用$resource(已更新)
Sep 14 Javascript
利用jqgrid实现上移下移单元格功能
Nov 07 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
Nov 30 Javascript
微信小程序结合mock.js实现后台模拟及调试
Mar 28 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
Sep 01 Javascript
微信小程序实现页面监听自定义组件的触发事件
Nov 01 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
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
PHP的静态方法与普通方法用法实例分析
2019/09/26 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
var与Javascript变量隐式声明
2009/09/17 Javascript
JavaScript 轻松搞定快捷留言功能 只需一行代码
2010/04/01 Javascript
DOM 中的事件处理介绍
2012/01/18 Javascript
javascript实现框架高度随内容改变的方法
2015/07/23 Javascript
js实现右键菜单功能
2016/11/28 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
小程序如何使用分包加载的实现方法
2019/05/22 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
自己使用总结Python程序代码片段
2015/06/02 Python
Python3爬楼梯算法示例
2019/03/04 Python
Python批量查询关键词微信指数实例方法
2019/06/27 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
python 下载文件的多种方法汇总
2020/11/17 Python
python爬取youtube视频的示例代码
2021/03/03 Python
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
俄罗斯马克西多姆家居用品网上商店:Максидом
2020/02/06 全球购物
自我鉴定怎么写
2014/01/12 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
优秀党员先进材料
2014/12/18 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis
win11如何查看端口是否被占用? Win11查看端口是否占用的技巧
2022/04/05 数码科技