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 smipleChart 简单图标类
Jan 12 Javascript
javascript中关于执行环境的杂谈
Aug 14 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
Dec 04 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
Mar 01 Javascript
基于jQuery的Web上传插件Uploadify使用示例
May 19 Javascript
JavaScript动态添加事件之事件委托
Jul 12 Javascript
深入解析Vue 组件命名那些事
Jul 18 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
Jan 16 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
Feb 11 Javascript
Nuxt.js实战和配置详解
Aug 05 Javascript
记录vue做微信自定义分享的一些问题
Sep 12 Javascript
jQuery实现计算器功能
Oct 19 jQuery
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使用file_get_content设置头信息的方法
2016/02/14 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
JavaScript中判断变量是数组、函数或是对象类型的方法
2015/02/25 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
python3中eval函数用法使用简介
2019/08/02 Python
Python 函数list&read&seek详解
2019/08/28 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
美国Max仓库:Max Warehouse
2020/05/31 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
给校长的建议书100字
2014/05/16 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
政府个人对照检查材料
2014/08/28 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python