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 相关文章推荐
列表内容的选择
Jun 30 Javascript
清华大学出版的事半功倍系列 javascript全部源代码
May 04 Javascript
自己的js工具 Cookie 封装
Aug 21 Javascript
jquery 提示信息显示后自动消失的具体实现
Dec 18 Javascript
JQuery实现左右滚动菜单特效
Sep 28 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
JavaScript中Array对象用法实例总结
Nov 29 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 Javascript
jQuery实现的form转json经典示例
Oct 10 jQuery
node实现分片下载的示例代码
Oct 17 Javascript
如何基于原生javaScript生成带图片的二维码
Nov 21 Javascript
JavaScript实现点击图片换背景
Nov 20 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 UTF-8、Unicode和BOM问题
2010/05/18 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
jQuery实现将页面上HTML标签换成另外标签的方法
2015/06/09 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
轻松实现jquery手风琴效果
2016/01/14 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
浅谈Python中的数据类型
2015/05/05 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
python关于倒排列的知识点总结
2020/10/13 Python
Python 图片处理库exifread详解
2021/02/25 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
财务主管岗位职责
2014/02/28 职场文书
安全教育演讲稿
2014/05/09 职场文书
护林防火标语
2014/06/27 职场文书
执行力心得体会范文
2016/01/11 职场文书
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python
MySQL窗口函数的具体使用
2021/11/17 MySQL
Java 死锁解决方案
2022/05/11 Java/Android
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL