Nodejs路由的简易实现

index.js

主模块,用于组织其他模块

var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");

var handle = {};
handle["/"] = requestHandlers.one;
handle["/one"] = requestHandlers.one;
handle["/two"] = requestHandlers.two;

server.start(router.route, handle);

server.js

服务器模块,设置端口

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

function start (route, handle) {
    function onRequest (request, response) {
        var pathname = url.parse(request.url).pathname;
        var postData = "";
        route(handle, pathname, response, postData);
    }
    http.createServer(onRequest).listen(8888);
}

exports.start = start;

router.js

路由模块,根据不同的url调用不同的方法

function route (handle, pathname, response, data) {
    if(typeof handle[pathname] === 'function'){
        handle[pathname](response, data);
        //根据pathname调用方法
    }
    else{    //不存在
        response.writeHead(404, {"Content-Type": "text/plain"});
        response.write("404 Not found");
        response.end(); 
    }
}

exports.route = route;

requestHandlers

实现具体的操作

function one (response, data) {
    var body = '' + 
        '' +
        '' +
        '' +
        '' +
        'two' +
        ''+
        '';

    response.writeHead(200, {"Content-Type": "text/html"});
    //当Content-Type为"text/plain"时,返回的内容将直接显示
    response.write(body);
    response.end(); 
}
function two (response, data) {
    var body = '' + 
        '' +
        '' +
        '' +
        '' +
        'one' +
        ''+
        '';

    response.writeHead(200, {"Content-Type": "text/html"});
    response.write(body);
    response.end();  
}
exports.one = one;
exports.two = two;

运行

在命令行执行

node index.js

结果

点击页面上的链接可互相跳转

参考链接

Node入门

你可能感兴趣的:(Nodejs路由的简易实现)