Nodejs学习(二)--路由(router)

所谓路由就是web服务器会根据用户输入的不同url(实际是path不同, domain是相同的, 包括协议, host, port)返回不同的页面。例如登录页面login和注册页面register

#默认端口为80
http://localhost/login #login页面
http://localhost/register #register页面

实现思路
1.第一步要得到用户请求的url
可以通过监听函数中的request参数获取, 即request.url
2.解析url,得到具体的请求页面, 也就是路由入, login 和register
获取url之后,利用标准模块‘url’中的parse 函数提取出路由
首先看一下url.parse( )函数的功能, 例如调用url.parse(http://localhost/login)的结果如下所示

Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'localhost',
  port: null,
  hostname: 'localhost',
  hash: null,
  search: null,
  query: null,
  pathname: '/login',
  path: '/login',
  href: 'http://localhost/login' }

获得的是一个url对象, 可以提取出各部分的内容, 所以路由信息可以提取为

var pathname = url.parse(request.url).pathname;

但是我们还需要将‘/’去掉

pathname = pathname.replace(/\//,'')//去掉 '/'

3.编写路由器, 路由器就是若干个返回不同页面的函数集合, 路由器根据不同的路由信息调用不同的函数, 返回不同的页面。

//------------router.js-------------------------
module.exports = {
    login:function(req, res) {
    res.writeHead(200,{'Content-type':'text/html,charset=utf-8'})
    res.write('Login page')
    res.end()
    }, 
    register:function(req, res) {
    res.writeHead(200,{'Content-type':'text/html,charset=utf-8'})
    res.write('Register page')
    res.end()
    }
}

主函数入下, 则可实现根据不同的路由(pathname)调用不同的路由函数, 返回不同的页面。

//------------main.js---------------------
var http = require('http');
var functions=require('./models/functions.js')
var router=require('./router')
var url = require('url')
http.createServer(function(request, response) {
    var pathname = url.parse(request.url).pathname;
    pathname = pathname.replace(/\//,'')//去掉 '/'
    console.log(pathname)
    router[pathname](request, response)

}).listen(80);
console.log('Server is running at 127.0.1.1:80')

2.异常(例外)处理

就咱们的这个例子来说只在router里面定义了连个函数login 和register, 如果用户请求其他的页面,web 服务会直接崩溃,这不是我们希望看到的, 所以要提供例外来处理用户的其他我们没有定义的请求页面。 实现很简答, 只是将router[pathname](request, response)包进try…catch块中, 在catch中对异常进行妥善处理

try {
        router[pathname](request, response) 
    }catch(err) {
        response.writeHead(200,{'Content-Type':'text/html,charset=utf-8'});
        response.write(err.toString())
        response.end()
    }

这样即使用户输入千奇百怪的url, web服务也不会崩溃, 只会在前端显示错误信息提示用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值