资讯专栏INFORMATION COLUMN

Node.js 路由

pkwenda / 2792人阅读

摘要:最终我们启动命令行输入随后请求一个我们就会看到应用输出相应对信息,这表明我们对服务器已经在使用路由模块了。并会将请求对路径传递给路由,再由路由进行接下来对操作。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104404.html

相关文章

  • Node.js 系列:原生 Node.js 应用

    摘要:原生应用是一个基于引擎的运行环境使用了一个事件驱动非阻塞式的模型,使其轻量又高效的包管理器,是全球最大的开源库生态系统本文主要介绍构建一个应用的基本步骤和模块,并假定你已经对有一定的了解本文引用部分代码作为例子,如果希望参看全部源码,欢迎去 原生 Node.js 应用 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境Node.js 使用了一个事件驱...

    Ocean 评论0 收藏0
  • iKcamp团队制作|基于Koa2搭建Node.js实战(含视频)☞ 路由koa-router

    路由koa-router——MVC 中重要的环节:Url 处理器 ?? iKcamp 制作团队 原创作者:大哼、阿干、三三、小虎、胖子、小哈、DDU、可木、晃晃 文案校对:李益、大力萌、Au、DDU、小溪里、小哈 风采主播:可木、阿干、Au、DDU、小哈 视频剪辑:小溪里 主站运营:给力xi、xty 教程主编:张利涛 视频地址:https://www.cctalk.com/v/151...

    netmou 评论0 收藏0
  • Node.js原生开发入门完全教程

    摘要:原生开发入门完全教程微信公众号开发企业级产品全栈开发速成周末班首期班号正式开班,欢迎抢座一关于本篇文章参考了入门并从零到壹操作了一遍,感谢原作者,同时也强烈推荐大家移步到原文给予原文作者一个赞赏支持。 Node.js原生开发入门完全教程 (Node+Vue+React+微信公众号开发)企业级产品全栈开发速成周末班首期班(10.28号正式开班,欢迎抢座) 一、关于 本篇文章参考了Node...

    alphahans 评论0 收藏0
  • 基于node的登入例子(node-koa-mongoose)

    摘要:前言这是一个基于实现的一个简单登入例子,对于刚上手想进一步了解,前端页面如何请求到服务层路由处理数据库操作返回结果到页面这整个过程的同学比较有用。我们来看下登入请求处理。操作演示演示用户名不存在,密码错误及成功登入。 前言 这是一个基于node实现的一个简单登入例子,对于刚上手node想进一步了解,前端页面如何请求到服务层 -> 路由处理 -> 数据库操作 -> 返回结果到页面这整个过...

    lordharrd 评论0 收藏0
  • Express 实战(一):概览

    摘要:一个标准性的事件就是年的横空出世。引擎快速处理能力和异步编程风格,让开发者从多线程中解脱了出来。其次,通过异步编程范式将其高并发的能力发挥的淋漓尽致。它也仅仅是一个处理请求并作出响应的函数,并无任何特殊之处。 showImg(https://segmentfault.com/img/remote/1460000010819116); 在正式学习 Express 内容之前,我们有必要从大...

    zhaochunqi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<