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效劳器已经在运用路由模块了。并会将要求对途径通报给路由,再由路由举行接下来对操纵。