【nodejs】初識 NodeJS(三)

上節咱們將 http 服務器(server.js)和請求路由模塊(route.js)整合在一塊兒了,固然這還不夠,路由,顧名思義,是指咱們要針對不一樣的 url 有不一樣的處理方式。node

請求處理程序模塊(requestHandlers)

function start() {
    console.log('Request handler "start" was called.');
}

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

exports.start = start;
exports.upload = upload;

下面咱們須要將請求處理程序模塊和路由模塊相結合,修改主文件 index.js瀏覽器

var server = require('./server');
var route = require('./route');
var requestHandlers = require('./requestHandlers');

var handler = {};
handler['/'] = requestHandlers.start;
handler['/start'] = requestHandlers.start;
handler['/upload'] = requestHandlers.upload;

server.start(route.route, handler);

正如所見,將不一樣的 url 映射到相同的請求處理程序上是很容易的:只要在對象中添加一個鍵爲 '/' 的屬性,對應 requestHandlers.start 便可,這樣咱們就能夠乾淨簡潔地配置 /start 和 / 的請求都交由 start 這一處理程序處理。在完成了對象的定義後,咱們把它做爲額外的參數傳遞給服務器。服務器

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

function start(route, handler) {
    function onRequest(request, response) {
        var pathname = url.parse(request.url).pathname;
        console.log('Request ' + pathname + ' received.');

        route(handler, pathname);

        response.writeHead(200, {
            'Content-type': 'text/plain'
        });
        response.write('Hello node.js');
        response.end();
    }

    http.createServer(onRequest).listen(8888);
    console.log('server has started.');
}

exports.start = start;

這樣咱們就在 start() 函數裏添加了 handler 參數,而且把 handler 對象做爲第一個參數傳遞給了 route() 回調函數。函數

function route(handler, pathname) {
    console.log('Route a request for ' + pathname);

    if (typeof handler[pathname] === 'function') {
        handler[pathname]();
    } else {
        console.log('No request handler found for ' + pathname);
    }
}

exports.route = route;

這樣,咱們就把服務器、路由和請求處理程序結合在一塊兒了。如今咱們啓動應用程序並在瀏覽器中訪問 http://localhost:8888/start,如下日誌能夠說明系統調用了正確的請求處理程序:ui

server has started.
Request /start received.
Route a request for /start
Request handler "start" was called.
Request /favicon.ico received.
Route a request for /favicon.ico
No request handler found for /favicon.ico
相關文章
相關標籤/搜索