Node入门 √
http://www.nodebeginner.org/index-zh-cn.html

index.js

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

var handle = {}
handle["/"] = requestHandlers.start
handle["/start"] = requestHandlers.start
handle["/upload"] = requestHandlers.upload

server.start(router.route, handle)

server.js 服务器

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

function start(route, handle) {
    function onRequest(request, response) {
        var postData = ""
        var pathname = url.parse(request.url).pathname
        console.log("Request for " + pathname + " received.")

        request.setEncoding("utf8")

        request.addListener("data", function(postDataChunk) {
            postData += postDataChunk
            console.log("Received POST data chunk '" + postDataChunk + "'.")
        })

        // 监听 /start /upload 的请求,/start 没有post也有end
        request.addListener("end", function() {
            route(handle, pathname, response, postData)
        })

    }

    http.createServer(onRequest).listen(8888)
    console.log("Server has started.")
}

exports.start = start

router.js 路由

function route(handle, pathname, response, postData) {
    console.log("About to route a request for " + pathname)
    if (typeof handle[pathname] === 'function') {
        handle[pathname](response, postData)
    } else {
        console.log("No request handler found for " + pathname)
        response.writeHead(404, {"Content-Type": "text/plain"})
        response.write("404 Not found")
        response.end()
    }
}

exports.route = route

requestHandlers.js 请求处理程序

var querystring = require("querystring")

function start(response, postData) {
    console.log("Request handler 'start' was called.")

    var body = '<!doctype html>' +
    '<html lang="zh-CN">' +
        '<head>' +
            '<meta charset="utf-8">' +
            '<title></title>' +
        '</head>' +
        '<body>' +
            '<form action="/upload" method="post">' +
                '<input name="title" type="text">' +
                '<textarea name="description"></textarea>' +
                '<input type="submit" value="Submit text">' +
            '</form>' +
        '</body>' +
    '</html>'

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

function upload(response, postData) {
    var body = '<!doctype html>' +
    '<html lang="zh-CN">' +
        '<head>' +
            '<meta charset="utf-8">' +
            '<title></title>' +
        '</head>' +
        '<body>' +
            querystring.parse(postData).title +
            querystring.parse(postData).description +
        '</body>' +
    '</html>'
    console.log("Request handler 'upload' was called.")
    response.writeHead(200, {"Content-Type": "text/html"})
    response.write(body)
    response.end()
}

exports.start = start
exports.upload = upload