读《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;
准备再深入了解一下。