JS手札

Node JS

关于JS调用

         被调用:exports.cv=cv;

                            cv为类,可以使用其方法cv.***;

                            cv为函数名,可以使用其函数cv( , );

         调用: var cv=require(cv);

         路径:

         绝对:/.../.../xxx.js

         相对:./xxx.js(同一个文件夹下)

         上一级目录:../

         否则,要么是核心模块,要么是从node_modules文件夹加在

文件夹作为模块:

         在文件夹的根下建立package.json文件夹,表示了一个主模块,可能内容为:

    { "name" : "some-library",  

     "main" : "./lib/some-library.js" }

如果这个是在一个文件夹./some-library下,那么require(’./some-library)时,将试图加载./some-library/lib/some-library.js;

如果这个目录下吗,没有package.json文件,那么node将试图从这个目录下加在index.js或者index.node文件。例如,如果上面没有package.json文件,那么require('./some-library')时,将试图加载下面的文件:

    ./some-library/index.js

    ./some-library/index.node

服务器架构

Index.js : 主机

1     var server = require("./server");
2     var router = require("./router");
3     var requestHandlers = require("./requestHandlers");
4     var handle = {}
5     //handles启用   
6     handle["/"] = requestHandlers.start;
7     handle["/start"] = requestHandlers.start;
8     handle["/upload"] = requestHandlers.upload;
9     server.start(router.route, handle);

Server.js :服务器

 1 var http = require("http");
 2     var url = require("url");
 3     function start(route, handle) {
 4         function onRequest(request, response) {
 5                 var pathname = url.parse(request.url).pathname;
 6                 console.log("Request for " + pathname + " received.");
 7                 route(handle, pathname, response, request);
 8           }
 9           http.createServer(onRequest).listen(8888);
10            console.log("Server has started.");
11 }
12     exports.start = start;

router.js       :路由(依据handles[pathname]

 1     function route(handle, pathname, response, request) {
 2   console.log("About to route a request for " + pathname);
 3   if (typeof handle[pathname] === 'function') {
 4     handle[pathname](response, request);
 5   } else {
 6     console.log("No request handler found for " + pathname);
 7     response.writeHead(404, {"Content-Type": "text/html"});
 8     response.write("404 Not found");
 9     response.end();
10   }
11 }
12 exports.route = route;

requestHandlers.jss :处理程序

 1     var querystring = require("querystring"),
 2     fs = require("fs"),
 3     formidable = require("formidable");
 4     var mylib=require("./mylib");
 5     var canvas = require('canvas');
 6     console.log('loading the database...');
 7     var DataSet=mylib.getDataSet();
 8 
 9     function start(response) {
10       var body = '<html>'+
11     '<head>'+
12     '<meta http-equiv="Content-Type" content="text/html; '+
13     'charset=UTF-8" />'+
14     '<br/><br/><br/>'+
15     "<body background='http://localhost/myweb/groundback.jpg' repeat/>"+
16     '</head>'+
17     '<body>'+
18     '<center>'+
19     '<form action="/upload" enctype="multipart/form-data" '+
20     'method="post">'+
21     '<input type="file" name="upload" multiple="multiple" value="Brow">'+
22     '<input type="submit" value="Retrieval" />'+
23     '</form>'+
24     '</center>'+
25     '</body>'+
26     '</html>';
27     response.writeHead(200, {"Content-Type": "text/html"});
28     response.write(body);
29     response.end();
30 }
31 function upload(response, request) {
32     //Save :Query Image
33        var form = new formidable.IncomingForm();
34     form.uploadDir = "tmp";
35     form.parse(request, function(error, fields, files) {
36     fs.renameSync(files.upload.path, "./tmp/test.png");
37 
38        var  iCanvas = new canvas(200,200);
39     var  iCtx = iCanvas.getContext('2d');
40      //Deal :Query Image
41     var img = new canvas.Image;
42     img.src ="./tmp/test.png";
43     var qFeaSet=mylib.doWithQuery('test.png','tmp',img);    
44     var Result_Intrieval=mylib.imgIntrieval(qFeaSet,DataSet);
45     var Name=Result_Intrieval[0];
46     var dir_s=Result_Intrieval[1];
47     
48     //FeedBack Result    
49     //Rename
50     var old_src='./tmp/test.png';
51     var new_src='C:/AppServ/www/myweb/show/tmp/test.jpg';
52     var fileReadStream = fs.createReadStream(old_src);
53     var fileWriteStream = fs.createWriteStream(new_src);
54     fileReadStream.pipe(fileWriteStream);
55     
56     for (var ii=0;ii<Name.length;ii+=1){
57     var old_src=dir_s+'/'+Name[ii]+'.jpg';
58     var new_src='C:/AppServ/www/myweb/show/tmp/'+ii+'.jpg';
59     var fileReadStream = fs.createReadStream(old_src);
60     var fileWriteStream = fs.createWriteStream(new_src);
61     fileReadStream.pipe(fileWriteStream);
62 
63 if (ii==(Name.length-1)){
64 for (var a=0;a<100000;a++){
65 if(a==99999){
66 fs.readFile('./show.html', function (err, html) {  
67     if (err) {  
68         throw err;   
69     }         
70         response.writeHeader(200, {"Content-Type": "text/html"});    
71         response.write(html);    
72         response.end();    
73 })
74 }}}} }) }
75 exports.start = start;
76 exports.upload = upload;

多重引号

JavaScript的引号嵌套时单引号和双引号是交替使用的,但是到第三层就会出现解析错误如:

'<a href="javascript: do('something');">'

这种用情况下something前的单引号会成为整个字符串的结束,解决方式:

'<a href="javascript: do(\'something\');">'

转义单引号即可,但是转义时不可用双引号:

'<a href="javascript: do(\"something\");">'

这样的话解析时,something前的双引号会被作为href属性的结束。

所以转义时也必须交替进行。

关于图片展示

         不能直接用当前的相对路径或绝对路径,必须把图片作为资源加在进来。

NodeJS 与Html代码分离

 1     var http = require('http'),  
 2            fs = require('fs');  
 3 fs.readFile('./index.html', function (err, html) {  
 4     if (err) {  
 5         throw err;   
 6     }         
 7     http.createServer(function(request, response) {    
 8         response.writeHeader(200, {"Content-Type": "text/html"});    
 9         response.write(html);    
10         response.end();    
11     })
12 });  

调试:

         Chrome :Inspector node --debug-brk a.js=>http://localhost:8080/debug?port=5858

命令                                             功能

run                                         执行脚本,在第一行暂停

restart                                              重新执行脚本

cont, c                                              继续执行,直到遇到下一个断点

next, n                                              单步执行

step, s                                              单步执行并进入函数

out, o                                                从函数中步出

setBreakpoint(), sb()                                       当前行设置断点

setBreakpoint(‘f()’), sb(...)                                   在函数f的第一行设置断点

setBreakpoint(‘script.js’, 20), sb(...)             在 script.js 的第20行设置断点

clearBreakpoint, cb(...)                             清除所有断点

backtrace, bt                                       显示当前的调用栈

list(5)                                           显示当前执行到的前后5行代码

watch(expr)                                          把表达式 expr 加入监视列表

unwatch(expr)                                     把表达式 expr 从监视列表移除

watchers                                          显示监视列表中所有的表达式和值

repl                                               在当前上下文打开即时求值环境

kill                                                  终止当前执行的脚本

scripts                                               显示当前已加载的所有脚本

version                                              显示v8版本

posted on 2014-06-27 15:08  Jason_Fu  阅读(196)  评论(0编辑  收藏  举报

导航