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.route,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(route,handler) {
    console.log("Starting~~");

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

        var content = route(pathname,handler);
        if (content){
            res.writeHead(200,{
                "Content-Type":"text/plain"
            });
            res.write('OK');
            res.end();
        }else {
            res.writeHead(404,{
                "Content-Type":"text/plain"
            });
            res.write("404 not found");
            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 (pathname == undefined) pathname="/";
    if (handler){
        if (typeof handler[pathname] === 'function'){
            handler[pathname]();
            return true;
        }else {
            console.log("No Method found for " + pathname);
            return null;
        }
    }else {
        console.log("No Method found in handler ");
        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;
  • 末了
    我们在浏览器中输入http://127.0.0.1:1337/http://127.0.0.1:1337/show,能够看到浏览器页面显现OK,命令行打印响应的log.

在项目中:
1.server.js预定义处置惩罚路由要领,然后挪用启动效劳器的要领(start.js)。
2.start.js担任启动效劳,剖析url通报过来的途径,将url通报给router.js。
3.router.js去推断路由是不是准确,然后挪用对应url的处置惩罚要领,处置惩罚要领完成在handlers.js。
4.handlers.js举行真正的路由处置惩罚。
如许,我们就手动完成了一个nodejs路由掌握的示例。

    原文作者:Mofei
    原文地址: https://segmentfault.com/a/1190000008581318
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞