VIP用户交流群:462197261 收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
在线客服:78895949
tonglan
  • 当前位置:
  • Node.js 路由的实现方法

    建站教程 2019年11月09日 关键词:,,,

    我们平时工作中,涉及到后台开发,路由基本上是我们第一个需要建的,路由还是很重要的。

    那么,什么是路由呢,通俗点举个例子,一个宾馆前台,来了十位客人,前台会安排十位客人入住,每位客人到达宾馆以后,该去哪个房间,都是通过前台来安排。(别喷我)

    在一个域名下,会有很多个可访问的地址,这就是路由。

    我们呢,要为路由提供请求的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服务器已经在使用路由模块了。并会将请求对路径传递给路由,再由路由进行接下来对操作。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持北冥有鱼。

    您可能感兴趣的文章:

    • 初学node.js中实现删除用户路由
    • node.js中路由,中间件,ge请求和post请求的参数详解
    • Node.js自定义实现文件路由功能

    广而告之:
    热门推荐:
    Vue组件中slot的用法

    下面给大家介绍Vue组件中slot的用法 主要是让组件的可扩展性更强。 1. 使用匿名slot 2. 给slot加个名字 如果不在有slot的组件里加入任何标签,slot什么都不会显示的。 总结 以上所述是小编给大家介绍的Vue组件中slot的用法,希望对大家有所帮助,如果大家有任何疑问请给我留···

    PHP 和 XML: 使用expat函数(二)

     PHP 和 XML: 使用expat函数(二)  让我们看一下实际处理这个文档的PHP代码。 /*NewsBoy : News system for the web written in PHP by Justin Grant (Web: jusgrant.cjb.net or justin.host.za.net Mail: justin@glendale.net)25 March V0.0.2 Converted Newsboy···

    HTML5 Canvas的常用线条属性值总结

    线条属性概述线条的属性共有以下四个:1、lineCap属性lineCap 定义上下文中线的端点,可以有以下 3 个值。 butt:默认值,端点是垂直于线段边缘的平直边缘。round:端点是在线段边缘处以线宽为直径的半圆。square:端点是在选段边缘处以线宽为长、以一半线宽为宽的矩形。 2、 l···

    HTML5 canvas标签实现刮刮卡效果

    你玩过刮刮卡么?一不小心可以中奖的那种。今天我给大家分享一个基于HTML5技术实现的刮刮卡效果,在PC上只需按住鼠标,在手机上你只需按住指头,轻轻刮去图层就可以模拟真实的刮奖效果。 源码下载:点击下载 我们利用HTML5的画布Canvas,结合其提供的API,在Canvas元素上绘制···

    DedeCMS 友情链接按分类网站类型调用的方法

    关于DedeCMS 友情链接按分类网站类型调用的问题,很多草根站长在织梦论坛询问,近日烈火网根据本站需要恰巧遇到这个问题,就写一篇教程来告诉大家是如何现实的,演示请看织梦58网首页尾部的链接分类(以滑动门的形式显示)。     首先我们来介绍一下DedeCMS友情链接···

    ThinkPHP CURD方法之limit方法详解

    ThinkPHP CURD方法的limit方法也是模型类的连贯操作方法之一,主要用于指定查询和操作的数量,特别在分页查询的时候使用较多。并且ThinkPHP的limit方法可以兼容所有的数据库驱动类。 其具体用法如下: 1.限制结果数量: 例如获取满足要求的10个用户,如下调用即可: $User = M···

    php的扩展写法总结

    为什么要用C扩展 C是静态编译的,执行效率比PHP代码高很多。同样的运算代码,使用C来开发,性能会比PHP要提升数百倍。IO操作如CURL,因为耗时主要在IOWait上,C扩展没有明显优势。 另外C扩展是在进程启动时加载的,PHP代码只能操作Request生命周期的数据,C扩展可操作的范围更···

    使ecshop模板中可引用常量的实现方法

    比如$smarty.const.'常量',这个就不能用。 其实模板引擎原理上并不复杂,只是把一些模板标签替换为php中的函数,变量,语法结构罢了。 这次要在ecshop模板中加入引用常量的功能,只需在函数make_var()中加入两行代码 复制代码 代码如下: function make_var($val) { if (···

    深入浅出meta标签

    通常所说的META标签,是在HTML网页源代码中一个重要的html标签。META标签用来描述一个HTML网页文档的属性,例如作者、日期和时间、网页描述、关键词、页面刷新等。 1、viewport XML/HTML Code复制内容到剪贴板 <meta name="viewport" content="···

    PHP常用编译参数中文说明

    编译PHP常用的参数的解释 复制代码 代码如下: --prefix=/usr/local/php #指定 php 安装目录 --with-apxs2=/usr/local/apache/bin/apxs #整合apache,apxs功能是使用mod_so中的LoadModule指令,加载指定模块到 apache,要求 apache 要打开SO模块 --with-config-file-path=/usr/···