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调试过程中找不到哪里出错的可能原因
Dec 16 Javascript
JavaScript中的类(Class)详细介绍
Dec 30 Javascript
jQuery实现弹出窗口弹出div层的实例代码
Jan 09 Javascript
js禁止浏览器页面后退功能的实例(推荐)
Sep 01 Javascript
微信小程序如何获取openid及用户信息
Jan 26 Javascript
React Router v4 入坑指南(小结)
Apr 08 Javascript
Vue.js中对css的操作(修改)具体方式详解
Oct 30 Javascript
React+TypeScript+webpack4多入口配置详解
Aug 08 Javascript
axios实现简单文件上传功能
Sep 25 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
Feb 14 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
Nov 18 jQuery
js实现随机点名功能
Dec 23 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生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
thinkphp在模型中自动完成session赋值示例代码
2014/09/09 PHP
Yii使用技巧大汇总
2015/12/29 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
laravel 数据验证规则详解
2019/10/23 PHP
jquery 子窗口操作父窗口的代码
2009/09/21 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
深入理解Javascript中的自执行匿名函数
2016/06/03 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
2018/01/25 Javascript
Vue axios设置访问基础路径方法
2018/09/19 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
教导主任竞聘演讲稿
2014/05/16 职场文书
2014年营销工作总结
2014/11/22 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
海康机器人重磅发布全新算法开发平台VM4.2
2022/04/21 数码科技