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 : 主机
var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");
var handle = {}
//handles启用
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 pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
route(handle, pathname, response, request);
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
router.js :路由(依据handles[pathname])
function route(handle, pathname, response, request) {
console.log("About to route a request for " + pathname);
if (typeof handle[pathname] === 'function') {
handle[pathname](response, request);
} else {
console.log("No request handler found for " + pathname);
response.writeHead(404, {"Content-Type": "text/html"});
response.write("404 Not found");
response.end();
}
}
exports.route = route;
requestHandlers.jss :处理程序
var querystring = require("querystring"),
fs = require("fs"),
formidable = require("formidable");
var mylib=require("./mylib");
var canvas = require('canvas');
console.log('loading the database...');
var DataSet=mylib.getDataSet();
function start(response) {
var body = '<html>'+
'<head>'+
'<meta http-equiv="Content-Type" content="text/html; '+
'charset=UTF-8" />'+
'<br/><br/><br/>'+
"<body background='http://localhost/myweb/groundback.jpg' repeat/>"+
'</head>'+
'<body>'+
'<center>'+
'<form action="/upload" enctype="multipart/form-data" '+
'method="post">'+
'<input type="file" name="upload" multiple="multiple" value="Brow">'+
'<input type="submit" value="Retrieval" />'+
'</form>'+
'</center>'+
'</body>'+
'</html>';
response.writeHead(200, {"Content-Type": "text/html"});
response.write(body);
response.end();
}
function upload(response, request) {
//Save :Query Image
var form = new formidable.IncomingForm();
form.uploadDir = "tmp";
form.parse(request, function(error, fields, files) {
fs.renameSync(files.upload.path, "./tmp/test.png");
var iCanvas = new canvas(200,200);
var iCtx = iCanvas.getContext('2d');
//Deal :Query Image
var img = new canvas.Image;
img.src ="./tmp/test.png";
var qFeaSet=mylib.doWithQuery('test.png','tmp',img);
var Result_Intrieval=mylib.imgIntrieval(qFeaSet,DataSet);
var Name=Result_Intrieval[0];
var dir_s=Result_Intrieval[1];
//FeedBack Result
//Rename
var old_src='./tmp/test.png';
var new_src='C:/AppServ/www/myweb/show/tmp/test.jpg';
var fileReadStream = fs.createReadStream(old_src);
var fileWriteStream = fs.createWriteStream(new_src);
fileReadStream.pipe(fileWriteStream);
for (var ii=0;ii<Name.length;ii+=1){
var old_src=dir_s+'/'+Name[ii]+'.jpg';
var new_src='C:/AppServ/www/myweb/show/tmp/'+ii+'.jpg';
var fileReadStream = fs.createReadStream(old_src);
var fileWriteStream = fs.createWriteStream(new_src);
fileReadStream.pipe(fileWriteStream);
if (ii==(Name.length-1)){
for (var a=0;a<100000;a++){
if(a==99999){
fs.readFile('./show.html', function (err, html) {
if (err) {
throw err;
}
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(html);
response.end();
})
}}}} }) }
exports.start = start;
exports.upload = upload;
多重引号
JavaScript的引号嵌套时单引号和双引号是交替使用的,但是到第三层就会出现解析错误如:
'<a href="javascript: do('something');">'
这种用情况下something前的单引号会成为整个字符串的结束,解决方式:
'<a href="javascript: do(\'something\');">'
转义单引号即可,但是转义时不可用双引号:
'<a href="javascript: do(\"something\");">'
这样的话解析时,something前的双引号会被作为href属性的结束。
所以转义时也必须交替进行。
关于图片展示
不能直接用当前的相对路径或绝对路径,必须把图片作为资源加在进来。
NodeJS 与Html代码分离
var http = require('http'),
fs = require('fs');
fs.readFile('./index.html', function (err, html) {
if (err) {
throw err;
}
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(html);
response.end();
})
});
调试:
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版本
JS手札的更多相关文章
- JavaScript手札:《编写高质量JS代码的68个有效方法》(一)(1~5)
编写高质量JS代码的68个有效方法(一) *:first-child { margin-top: 0 !important; } body>*:last-child { margin-botto ...
- Batsing的网页编程规范(HTML/CSS/JS/PHP)
特别注意!!!我这里的前端编程规范不苟同于Bootstrap的前端规范. 因为我和它的目的不同,Bootstrap规范是极简主义,甚至有些没有考虑到兼容性的问题. 我的规范是自己从编程实践中总结出来的 ...
- 转-Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
转-http://snowolf.iteye.com/blog/1628861/ Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariab ...
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable(转)
最近需要做些接口服务,服务协议定为JSON,为了整合在Spring中,一开始确实费了很大的劲,经朋友提醒才发现,SpringMVC已经强悍到如此地步,佩服! 相关参考: Spring 注解学习手札(一 ...
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
- (数据科学学习手札47)基于Python的网络数据采集实战(2)
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...
- 通过js检测浏览器支持的字体,从而显示支持的字体,让用户选择。
http://www.zhangxinxu.com/wordpress/2018/02/js-detect-suppot-font-family/ 本文根据张鑫旭文章. 字体函数: var dataF ...
- (数据科学学习手札80)用Python编写小工具下载OSM路网数据
本文对应脚本已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们平时在数据可视化或空间数据分析的过程中经常会 ...
- Vue.js 和 MVVM 小细节
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
随机推荐
- JavaEE Log4j
1.Log4j是Apache的一个开放源代码项目,可以通过一个配置文件来灵活的进行配置,而不需要修改应用的代码. 2.Log4j有三个主要部件组成: 记录器:按照布局中指定的格式把日志信息写入一个或多 ...
- 端口限制情况下php+xdebug环境配置
PHP程序在开发的时候调试是比较方便的,大体情况下,输出,打log是可以解决几乎所有问题. 但是还不够,有些问题,用打log的形式定位问题是相当痛苦的事情,有些时候测试环境没配好的话,你可能需要做许多 ...
- http——tinyhttp分析
1.前言: 1)tinyhttpd是一个500行+的http服务器 2)支持迭代和多线程并发两种服务器模型 3)支持GET和POST方法 4)支持CGI(fork.execl方式) 5)虽然响应的ht ...
- css 之 文本缩进属性(text-indent)
文章转自:http://www.10wy.net/Article/CSS/CSS_list_8.html查看更多更专业性的文章请到:网页设计网 文本缩进属性(text-indent) 这个属性设定文本 ...
- 执行时关闭标识位 FD_CLOEXEC 的作用
首先先回顾 apue 中对它的描述: ① 表示描述符在通过一个 exec 时仍保持有效(书P63,3.14节 fcntl 函数,在讲 F_DUPFD 时顺便提到) ② 对打开文件的处理与每个描述符的执 ...
- String Date Calendar之间的转换
1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDa ...
- 为什么eclipse中代码提示错误,但是项目目录却不提示错误
public class Aasf { public static void main(String[] args) { System.out.println("");aihfsa ...
- [DNS][转]EDNS
随着业务的复杂化和多样化,RFC1035中定义的DNS消息格式和它支持的消息内容已经不足以满足一些DNS服务器的需求,于是,RFC2671 中提出了一种扩展DNS机制EDNS(Extension Me ...
- CodeSimth - .Net Framework Data Provider 可能没有安装
使用CodeSimth 连接SQLite数据库库 提示错误 codesmith 6以上的版本,说是支持sqlite生成,也有对应的sqliteprovider.dll,但是使用时却说Test fail ...
- .NET/android/java/iOS AES通用加密解密(修正安卓)
移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...