读《Node入门》笔记

《Node入门》

中文乱码的问题还没解决,网上找的方法没作用啊。以后再看看。

代码:

  • index.js
/**
 * 启动器
 * Created by Z on 2017/4/19.
 */

function say(value) {
    console.log(value);
}

function excute(Function, value) {
    Function(value);
}
excute(say, 'are you ok');

excute(function (value) {//匿名函数
    console.log(value);
}, 'don\'t break my heart');

// ------------------

var server = require('./server');//调用模块
var route = require('./routes');
var requestHandlers = require('./requestHandlers');

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

server.start(route.route, handler);
  •  server.js
/**
 * 服务
 * Created by Z on 2017/4/19.
 */
var http = require("http");
var url = require("url");


function start(route, handler) {

    function onRequest(request, response) {

        // var postDate = "";
        // request.setEncoding("utf8");
        // request.url 和 url.parse(request.url).pathname 相同

        var pathname = url.parse(request.url).pathname;//请求路径名称

        //-------阻塞式-------
        //只有一个response在执行 同步
        // console.log(pathname);
        // var result = route(handler, pathname);//将参数传递到路由
        //
        // console.log('**************'+result);
        // response.writeHead(200, {"Content-Type": "text/plain"});
        // response.write(result);
        // response.end();

        // -------改进后-------
        //多个response 异步
        // route(handler, pathname, response);


        // /**
        //  * 监听传过来的数据
        //  */
        // request.addListener("data", function (postDataChunk) {
        //     postDate += postDataChunk;
        //     console.log('数据块:'+postDataChunk);
        //     console.log('获取到请求数据:'+postDate);
        //
        // });
        //
        // /**
        //  * 监听 所有数据传输完成后 穿递给路由
        //  */
        // request.addListener("end",function () {
        //     route(handler,pathname,response,postDate);
        // });


        //-------4-------

        route(handler, pathname, response, request);

    };

    http.createServer(onRequest).listen(8888);
};

exports.start = start;

 

  • rotes.js
/**
 * 路由器
 * Created by Z on 2017/4/20.
 */

// function route(handler, path, response,postData) {
//     console.log('that path is: ' + path);
//     if (typeof handler[path] === 'function') {
//         return handler[path](response,postData);
//     } else {
//         console.log('找不到处理程序:' + path);
//
//         response.writeHead(404, {"Content-Type": "text/plain"});
//         response.write("404 Not Found");
//         response.end();
//     }
// };

//图片上传不需要再使用postData
function route(handler, path, response, request) {
    console.log('that path is: ' + path);
    if (typeof handler[path] === 'function') {
        return handler[path](response, request);
    } else {
        console.log('找不到处理程序:' + path);

        response.writeHead(404, {"Content-Type": "text/plain"});
        response.write("404 Not Found");
        response.end();
    }
};
exports.route = route;

 

  • requestHandlers.js
/**
 * 请求处理程序
 * Created by Z on 2017/4/20.
 */

// var exec = require("child_process").exec;
var fs = require("fs");
var querystring = require("querystring");

//在idea中引用别的模块 需要在package.json文件中注册
// 如: "formidable": "~1.1.1"

var formidable = require("formidable");

// function start(response, postData) {
function start(response, request) {
    //-------阻塞-------
    // function sleep(milliSeconds) {
    //     var startTime = new Date().getTime();
    //     while (new Date().getTime() < startTime + milliSeconds) {
    //         console.log(new Date().getTime());
    //     }//暂停一段时间 10000=10S。
    // }
    //
    // sleep(10000);

    //-------2-------
    // var content = 'empty';
    //这里和书上不一样,不会延迟10秒,而且还乱码
    // exec("dir c:",
    //     {timeout: 10000, maxBuffer: 20000 * 1024},
    //     function (error, stdout, stderr) {
    //     console.log(stdout);
    //
    //     response.writeHead(200, {"Content-Type": "text/plain"});
    //     response.write(stdout);
    //     response.end();
    //
    //     //-------2-------
    //     // content = stdout;
    // });

    //-------3-------
    // var body = '<html>' +
    //     '<head>' +
    //     '<meta http-equiv="Content-Type" content="text/html; ' +
    //     'charset=UTF-8" />' +
    //     '</head>' +
    //     '<body>' +
    //     '<form action="/upload" method="post">' +
    //     '<textarea name="text" rows="20" cols="60"></textarea>' +
    //     '<input type="submit" value="Submit text" />' +
    //     '</form>' +
    //     '</body>' +
    //     '</html>';

    var body = '<html>' +
        '<head>' +
        '<meta http-equiv="Content-Type" ' +
        'content="text/html; charset=UTF-8" />' +
        '</head>' +
        '<body>' +
        '<form action="/upload" enctype="multipart/form-data" ' +
        'method="post">' +
        '<input type="file" name="upload">' +
        '<input type="submit" value="Upload file" />' +
        '</form>' +
        '</body>' +
        '</html>';

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

    // -------2-------
    // return content;

    // -------1-------
    // console.log('---start---');
    // return 'Hello Start!';
}

//-------4------
// function upload(response, postData) {
//     response.writeHead(200, {"Content-Type": "text/plain"});
//     response.write('上传数据为:\n' + postData);
//     response.end();
// }

function upload(res, req) {
    var form = new formidable.IncomingForm();
    form.uploadDir = "../images";
    form.parse(req, function (error, fields, files) {
        // 报错:cross-device link not permitted, rename XXXXX
        // http://blog.csdn.net/starrexstar/article/details/8048722
        // 是由于Node.js安装的盘符和写的地方不在一个盘符,跨目录重命名文件导致的问题。可以多些下面一句话,重设临时上传路径

        fs.renameSync(files.upload.path, '../images/test.jpg');
        res.writeHead(200, {"Content-Type": "text/html"});
        res.write("received image:<br/>");
        res.write("<img src='/showImg' />");
        res.end();
    });
}


function showImg(response, postData) {

    fs.readFile("../images/test.jpg", "binary", function (error, file) {
        if (error) {
            response.writeHead(500, {"Content-Type": "text/plain"});
            response.write('错误' + error);
            response.end();
        } else {
            response.writeHead(200, {"Content-Type": "image/jpg"});
            response.write(file, "binary");
            response.end();
        }
    })
}

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

 

 

 

 

准备再深入了解一下。

posted @ 2017-04-21 15:34  抽象工作室upup  阅读(158)  评论(0编辑  收藏  举报