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 的状态改变可以自 ...
随机推荐
- UIScrollView内容缩放
•有些时候,我们可能要对某些内容进行手势缩放,如下图所示 UIScrollView不仅能滚动显示大量内容,还能对其内容进行缩放处理 也就是说,要完成缩放功能的话,只需要将需要缩放的内容添加到UIScr ...
- iframe用法总结
<iframe>是框架的一种形式,也比较常用到. 例子1. <iframe width=420 height=330 frameborder=0 scrolling=auto src ...
- 腾讯云服务器centos 6.5(jdk+tomcat+vsftp)、腾讯mysql数据库 及 tomcat自启动 配置教程
1.腾讯云数据库配置 1.考虑到安全性问题,,平常不使用root用户登录,新增一个用户名neil,用来管理项目的数据库 a.首先登录root创建db_AA数据库 b.在root用户下,创建neil用户 ...
- java中“/0”含义
public class Test { public static void main(String[] args) { // 正常情况下,对这个0,tp中储的是其对应的ASCII码48 char t ...
- JS Math.max() 函数
Math.max(a,b,...,x,y) -- 返回数个数字中较大的值 max是maximum的缩写,中文"最大量"的意思 max函数语法Math.max(a,b,...,x,y ...
- [转]as3 算法实例【输出1 到最大的N 位数 题目:输入数字n,按顺序输出从1 最大的n 位10 进制数。比如输入3,则输出1、2、3 一直到最大的3 位数即999。】
思路:如果我们在数字前面补0的话,就会发现n位所有10进制数其实就是n个从0到9的全排列.也就是说,我们把数字的每一位都从0到9排列一遍,就得到了所有的10进制数. /** *ch 存放数字 *n n ...
- hibernate开发(1)
1 什么是ORM OR-mapping 是 object relational mapping 对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.解决了不同数据库s ...
- mkstemp生成临时文件
使用该函数可以指定目录生成临时文件,函数原型为 int mkstemp(char *template); 应用举例 int main(int argc, char *argv[]) { /* char ...
- Longest Substring Without Repeating Characters(Difficulty: Medium)
题目: Given a string, find the length of the longest substring without repeating characters. Examples: ...
- Asp.net Web API 返回Json对象的两种方式
这两种方式都是以HttpResponseMessage的形式返回, 方式一:以字符串的形式 var content = new StringContent("{\"FileName ...