Node.js 路由

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://segmentfault.com/a/1190000019386265
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞