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 带有滚动条的表格,标题固定,带排序功能.
Nov 13 Javascript
JavaScript的单例模式 (singleton in Javascript)
Jun 11 Javascript
js获取html文件的思路及示例
Sep 17 Javascript
利用JS进行图片的切换即特效展示图片
Dec 03 Javascript
浅谈JavaScript的事件
Feb 27 Javascript
Jquery轮播效果实现过程解析
Mar 30 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
Feb 16 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
Mar 10 Javascript
JS实现的简单折叠展开动画效果示例
Apr 28 Javascript
Vue事件修饰符native、self示例详解
Jul 09 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与已存在的Java应用程序集成
2006/10/09 PHP
强烈推荐:php.ini中文版(2)
2006/10/09 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
php实现学生管理系统
2020/03/21 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
php 数据结构之链表队列
2017/10/17 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
围观tangram js库
2010/12/28 Javascript
利用谷歌地图API获取点与点的距离的js代码
2012/10/11 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
ES6 Promise对象的含义和基本用法分析
2019/06/14 Javascript
js设计模式之单例模式原理与用法详解
2019/08/15 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
Python简单实现enum功能的方法
2016/04/25 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python tkinter实现屏保程序
2019/07/30 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
中专生自我鉴定
2013/12/17 职场文书
社团活动总结
2014/04/28 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
行政处罚事先告知书
2015/07/01 职场文书