Node.js开发系列(五)

上一节我们实现了简单的路由,这节我们实现更复杂的路由过程

  • 统一管理
    我们在server.js初始化路由控制,启动脚本的模块。

var server = require('./start');
var router = require('./router');
var requestHandlers = require('./handlers');

var handler = {};
handler["/"] = requestHandlers.home;
handler["/show"] = requestHandlers.show;
handler["/upload"] = requestHandlers.upload;

server.start(router,handler);


console.log("Run on port 1337");
  • 启动脚本
    server.js最后,我们调用了start模块,start模块即start.js文件。在start.js文件中处理,代码如下

var http = require('http');
var url = require('url');

function start(router,handler) {
    console.log("Starting~~");

    function onRequest(req, res) {
        var pathname = url.parse(req.url).pathname;  //解析url

        var content = router(pathname,handler); //传给router模块处理,返回处理内容
        if (content){
            res.writeHead(200,{
                "Content-Type":"text/plain"
            });
            res.write(content);
            res.end();
        }else {
            res.writeHead(404,{
                "Content-Type":"text/plain"
            });
            res.write("404 not found");
            res.end();
        }

        res.writeHead(200,{
            "Content-Type":"text/plain"
        });

        res.write("The First Server");
        res.end();
    }

    var port = process.env.port || 1337;
    http.createServer(onRequest).listen(port);
    console.log("Started!!");
}

exports.start = start;

这里的核心代码是调用router(pathname,handler);这个方法,这个方法是在router模块中实现。

  • 调用路由对应的方法
    router模块中判断参数pathnamehandler组合成的路径是否有实现。如果有,则调用相应的路由方法,router.js代码如下

function route(pathname,handler) {
    console.log("Route for path requested:" + pathname);
    if (typeof hanlder[pathname] == 'function'){  //判断路由是否存在
        handler[pathname](); //存在方法则调用相应的路由方法
    }else {
        console.log("No Method found for " + pathname);
        return null;
    }
}

exports.route = route;
  • 多个路由方法
    首先我们需要定义多个路由方法,为了方便统一的管理控制,我们将路由处理的方法都写在一个handlers.js的文件中,首先定义三个方法,这里只是实现最简单的打印

function home() {
    console.log("Request 'home' called.");
}

function show() {
    console.log("Request 'show' called.");
}

function upload() {
    console.log("Request 'upload' called.");
}

exports.home = home;
exports.show = show;
exports.upload = upload;
  • 最后

在项目中:
1.server.js预定义处理路由方法,然后调用启动服务器的方法(start.js)。
2.start.js负责启动服务,解析url传递过来的路径,将url传递给router.js。
3.router.js去判断路由是否正确,然后调用对应url的处理方法,处理方法实现在handlers.js。
4.handlers.js进行真正的路由处理。
这样,我们就手动实现了一个nodejs路由控制的示例。

IT文库 » Node.js开发系列(五)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址