交流群:462197261站长百科站长论坛热门标签收藏本站北冥有鱼 互联网前沿资源第一站 助力全行业互联网+
点击这里给我发消息
  • 当前位置:
  • Node.js 路由的实现方法

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

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

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

    我们呢,要为路由提供请求的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自定义实现文件路由功能

    广而告之:
    热门推荐:
    解决layui-open关闭自身窗口的问题

    如下所示: 1、这里的弹窗弹出来的是一个页面,经过了后台才弹出来的一个页面 1.1、弹窗的实现 1.1.1、 js 部分 function getArticleById(articleId){ var index = layer.open({ type: 2, title: '修改管理员', area: ['90%', '95%'], shade: 0.8, resize: false···

    使用dedecms做网站的用户需要漏洞处理

    第一、安装的时候数据库的表前缀,最好改一下,不用dedecms默认的前缀dede_,可以改成xxxx_,随便一个名称即可。 第二、后台登录开启验证码功能,将默认管理员admin删除,改成一个自己专用的,复杂点的账号,管理员密码一定要长,至少8位,而且字母与数字混合。 第三、装好程···

    详解Webpack多环境代码打包的方法

    在实际开发中常遇到,代码在 在package.json文件的scripts中,会提供开发环境与生产环境两个命令。但是实际使用中会遇见 测试版与正式版代码相继发布的情况,这样反复更改服务器地址,偶尔忘记更改url会给工作带来很多不必要的麻烦(当然也会对你的工作能力产生质疑)。这样就···

    php抽象类用法实例分析

    本文实例讲述了php抽象类用法。分享给大家供大家参考。具体如下: <?php /* * abstract * 抽象类: * 1、至少有一个抽象方法(没有具体实现的方法) * 2、不能被实例化,可以被继承 * 3、抽象类可以有子抽象类 * 相对于接口: * 1、可以有属性 * 2、一个子类···

    Javascript实现字数统计

    字数统计功能,原理是给textarea添加onKeyup事件,事件读取textarea内容并获得长度,并赋值给统计字数的那个文本节点,这里有一点要注意的是添加onKeypress和onKeydown事件也能实现效果,但都有些不足,会在某些情况下造成误解,我都试了下,感觉只用一个onKeyup事件是最明智的···

    SQL Server中通过扩展存储过程实现数据库的远程备份与恢复

    本文通过实例解析了 SQL Server 数据库扩展存储过程,实现远程备份与恢复的方法和步骤实例说明:   环境:win2k+sqlserver 2K+查询分析器   SQL SERVER服务实例名称:mainserver   需要备份的数据库名称: msdb   本地机器名称(Client端):david   本地用户:zf 密码···

    php实现的遍历文件夹下所有文件,编辑删除

    复制代码 代码如下:<?php /* 遍历文件夹; 功能:(a)可删除文件 (b)可编辑文本,网页文件 (c)可删除文件夹,前提是该文件夹为空 (d)可建立文件,文件夹,修改文件夹名称; lost63.com原创, 转载请注明出处. 交流QQ:35501547 */ $path=$DOCUMENT_ROOT; $path=str_replace("/",···

    javascript实现检验的各种规则

    本文实例讲述了javascript实现检验的各种规则。分享给大家供大家参考。具体如下: /** * 检验各种规则 * @param str 检验的内容 * @param cType 预设的检验规则 字符串[ * empty, 检验是否为空 * telphone, 座机手机号码 * allphone, 所有手机号码 ···

    javascript图片滑动效果实现

    本文为大家分享了javascript图片滑动效果实现方法,具体内容如下,先看一下效果图: 鼠标滑过那张图,显示完整的哪张图,移除则复位: 简单的CSS加JS操作DOM实现: <!doctype html> <html> <head> <meta charset="UTF-8"> <title>slidin···

    PHP内核探索:哈希表碰撞攻击原理

    下面通过图文并茂的方式给大家展示PHP内核探索:哈希表碰撞攻击原理。 最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招。本文结合PHP内核源码,聊一聊这种攻击的原理及实现。  哈希表碰撞攻击的基本原理 哈希表是一种查找效率···