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 Array Flatten 与递归使用介绍
Oct 30 Javascript
判断一个对象是否为jquery对象的方法
Mar 12 Javascript
jQuery实现购物车数字加减效果
Mar 14 Javascript
JavaScript中连接操作Oracle数据库实例
Apr 02 Javascript
javascript判断并获取注册表中可信任站点的方法
Jun 01 Javascript
微信小程序中顶部导航栏的实现代码
Mar 30 Javascript
老生常谈js数据类型
Aug 03 Javascript
jQuery插件Validation表单验证详解
May 26 jQuery
微信小程序上传图片功能(附后端代码)
Jun 19 Javascript
基于Webpack4和React hooks搭建项目的方法
Feb 05 Javascript
vue下canvas裁剪图片实例讲解
Apr 16 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
Nov 07 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替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
Redis构建分布式锁
2017/03/28 PHP
基于jQuery的弹出框插件
2012/03/18 Javascript
JavaScript判断变量是对象还是数组的方法
2014/08/28 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
2015/09/05 Javascript
js密码强度检测
2016/01/07 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
Python连接DB2数据库
2016/08/27 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
Python如何获取文件路径/目录
2020/09/22 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
介绍下Lucene建立索引的过程
2016/03/02 面试题
升职自荐信范文
2013/10/05 职场文书
企业内部培训方案
2014/02/04 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
公司委托书范本5篇
2014/09/20 职场文书
单位工作证明格式模板
2014/10/04 职场文书
2014年班级工作总结
2014/11/14 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers