var path = require('path');
var args = process.argv.splice(2);
var express = require('express');
var net = require('net');
var app = express();
var argsjson =JSON.parse(args[0]); //解析参数
var projects = argsjson.projects; //项目信息
var port = argsjson.port; //server启动端口
var hot = argsjson.hot; //是否要热刷新
var marked = require('marked'); //markdown预览插件
var iconv = require('iconv-lite'); //流操作辅助模块
var fs = require('fs'); //文件操作模块,读取md文件
var cookieParser = require('cookie-parser'); //cookie模块
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'imgsource')));
app.use(cookieParser());
app.get('/dcloudmdpaser', function (req, res) {  //markdown预览方法var filename = req.query.filename; //markdown文件(全路径)var theme = req.query.theme; //皮肤样式   默认/var projectname = req.query.projectname; //markdown文件所在项目,外部的markdown文件这个值是空的projectname = decodeURI(projectname);filename  = decodeURI(filename);var repath = req.query.repath; //markdown文件相对于项目根路径的相对路径repath  = decodeURI(repath);var charset = req.query.charset; //编码if(charset == "" || charset==undefined) {//不设置编码的话默认是u8charset = "utf-8";}if(theme==""||theme==undefined){ //默认使用github的markdown样式theme = "github-markdown.css";}var fileStr = fs.readFileSync(req.query.filename, {encoding:'binary'}); //读取markdown文件内容var buf = new Buffer(fileStr, 'binary');var str = iconv.decode(buf, charset);var html = marked(str); //使用marked解析markdown为htmlvar htmlstart = "<!DOCTYPE html><html><head><meta charset=\""+charset+"\" /><link rel=\"stylesheet\" href=\"/stylesheets/style.css\" type=\"text/css\" charset=\""+charset+"\" /><link rel=\"stylesheet\" href=\"/stylesheets/"+theme+"\" type=\"text/css\" charset=\""+charset+"\" /><link rel=\"stylesheet\" href=\"/stylesheets/prism.css\" type=\"text/css\" charset=\""+charset+"\" /><script src=\"/javascripts/prism.js\" type=\"text/javascript\" charset=\""+charset+"\"></script></head><body>"var htmlend = "</body></html>";html = htmlstart+html+htmlend;res.cookie('projectname', req.query.projectname, { expires: new Date(Date.now() + 900000), httpOnly: true }); //把项目名保存到cookie里res.cookie('repath', req.query.repath, { expires: new Date(Date.now() + 900000), httpOnly: true });//把相对路径保存到cookie里if(projectname==''){ //这说明是个外部的markdown文件var virtualprojectdir = filename.substring(0,filename.lastIndexOf("/")); //取出markdown文件所在目录var virtualprojectname = virtualprojectdir.substring(virtualprojectdir.lastIndexOf("/")+1,virtualprojectdir.length);//虚拟一个项目名出来//把虚拟出来的项目信息写到cookie里app.use('/'+encodeURIComponent(virtualprojectname),express.static(virtualprojectdir+''));res.cookie('projectname', virtualprojectname, { expires: new Date(Date.now() + 900000), httpOnly: true });res.cookie('repath', '', { expires: new Date(Date.now() + 900000), httpOnly: true });res.cookie('virtualprojectdir', virtualprojectdir, { expires: new Date(Date.now() + 900000), httpOnly: true });}else{//如果是项目内的markdown清除虚拟项目名res.cookie('virtualprojectdir', '', { expires: new Date(Date.now() + 900000), httpOnly: true });}res.send(html);
})
process.on('uncaughtException', function (err) { //这个是热刷新监听方法有时候会报错,但是不影响运行,catch住不管他console.error(err.stack);console.log("Node NOT Exiting...");
});//把项目路径添加到一个list里
var joins = new Array();
projects.forEach(function (value,index,array) {joins.push(path.resolve(decodeURIComponent(value.path)));
});//开启热刷新时,把上面的list传给对应参数
if (app.get('env') === 'development'&&hot) {var livereload = require('easy-livereload');app.use(livereload({watchDirs: joins,checkFunc:function(file){return true;},port: process.env.LIVERELOAD_PORT || 35729}));
}//静态目录代理
projects.forEach(function (value,index,array) {var pname = decodeURIComponent(value.name)var ppath = decodeURIComponent(value.path)app.use('/'+encodeURIComponent(pname),express.static(ppath+''));
});//处理静态监听找不到的文件
app.get('*', function(req, res){var projectname = req.cookies.projectname;var repath = req.cookies.repath;var virtualprojectdir = req.cookies.virtualprojectdir;var originalUrl = req.originalUrl;var ext ='';if(originalUrl.indexOf('.')>0){//后缀名,主要是监听看是不是图片ext = originalUrl.substring(originalUrl.lastIndexOf('.')+1);ext = ext.toLowerCase();}if(ext=='jpg'||ext=='png'||ext=='gif'){	//如果是图片大概率是markdown预览要使用的,那么拼下url看看能访问到不	if(virtualprojectdir!=''){//这个是外部markdown文件,那就直接以流的形式把图片丢回去res.set( 'content-type', ext );//设置返回类型var stream = fs.createReadStream( virtualprojectdir+"/"+req.cookies.repath+"/"+ originalUrl );var responseData = [];//存储文件流if (stream) {//判断状态stream.on( 'data', function( chunk ) {responseData.push( chunk );});stream.on( 'end', function() {var finalData = Buffer.concat( responseData );res.write( finalData );res.end();});}}else{//内部markdown文件,那么项目下必然存在该图片,重新组装下urlres.redirect("/" + req.cookies.projectname +"/"+req.cookies.repath+"/"+ originalUrl);}}else{//到这里说明这个文件真不知道是干啥的,在哪里了,返回404页面吧res.sendFile( __dirname + "/" + "404.html" );}  
});//启动server
var server = app.listen(port, function () {console.log('server start at '+port);
})server.on('error', function(err) { console.log(err); });//热刷新代码
if(args.length > 1 && args[1].length>0){var count = 0;function checkMain(){var client= new net.Socket();client.connect(args[1], function(){count = 0;client.destroy();setTimeout(checkMain, 2000);});client.on('error',function(error){if(error.code === 'ENOENT'){count++;}if(count>=2){process.exit();}else{setTimeout(checkMain, 2000);}});}setTimeout(checkMain, 2000);
}

【自己备用】HbuilderX浏览器运行(html中带.js文件时)(单独.html和html中有.css时)时出现404报错更换前的server.js文件内容plugins/nodeserver下

相关文章

  1. python的变量作用域问题

    偶然掉进了一个坑里。仔细分析了下原因。原来是变量作用域的问题。简单抽象如下&#xff1a; id1 #许多行代码 [id for id in range(10)] #许多行代码if id!1:#做一些事情pass else:#做另外一些事情结果由于id在 [id for id in range(10)]中受到了影响发生了变化&#xff0c;导…...

    2023/3/28 15:51:13
  2. 重载与覆盖

    简述 重载&#xff1a;是指允许存在多个同名函数&#xff0c;而这些函数的参数列表不同&#xff08;或许参数个数不同&#xff0c;或许参数类型不同&#xff0c;或许两者都不同&#xff09;。(1) 参数列表主要包括&#xff1a;参数的类型&#xff0c;参数的个数&#xff0c;参…...

    2023/3/28 15:51:13
  3. python list 的+、+=和extend操作

    据说后者在list很大的时候性能稍好。 于是测试了一把&#xff1a; import timedef time_cost(func):def _time_cost(*args,**kw):t1time.time()func(*args,**kw)t2time.time()return t2-t1return _time_costtime_cost def test_add(list_a,huge_list_b):return list_ahuge_list…...

    2023/3/28 15:51:12
  4. 引用与指针

    简介 引用就是某个目标变量的“别名”(alias)&#xff0c;对应用的操作与对变量直接操作效果完全相同。引用的声明方法&#xff1a;类型标识符 &引用名目标变量名。int a; int &raa; //定义引用ra,它是变量a的引用&#xff0c;即别名。  说明&#xff1a;&#xff08…...

    2023/3/28 15:51:11
  5. postgresql 函数存储过程 ; 递归查询

    函数&#xff1a;http://my.oschina.net/Kenyon/blog/108303 紧接上述&#xff0c;补充一下&#xff1a; 输入/输出参数的函数demo&#xff08;输入作为变量影响sql结果&#xff0c;输出作为结果返回&#xff09; create or replace function f_dept_salary_out2(int, out o_de…...

    2023/3/28 15:51:11
  6. 虚析构函数

    当派生类的对象从内存中撤销时一般先调用派生类的析构函数&#xff0c;然后再调用基类的析构函数。如果用new运算符建立了临时对象&#xff0c;若基类中有析构函数&#xff0c;并且定义了一个指向该基类的指针变量。在程序用带指针参数的delete运算符撤销对象时&#xff0c;会发…...

    2023/3/28 15:51:10
  7. python 正则表达式点号与'\n'符号的问题

    遇到了一个小虫&#xff0c;特记录之。 1.正则表达式及英文的处理如下&#xff1a; >>> import re >>> badfasdfasf<1safadsaf>23wfsa<13131> >>> pat re.compile(<.*?>) >>> pat.findall(b) [<1safadsaf>, <…...

    2023/3/28 15:51:10
  8. MySQL中的alter方法

    在表中添加新列add(after)alter table tbl_name add column col_name 字段类型 字段其他属性;例如&#xff1a;在id列后面添加name列。alter table student add column name varchar(20) not null after id.alter table tbl_name drop column col_name&#xff1b;删除表中的列…...

    2023/3/28 15:51:09
  9. django中抽象基类的Foreignkey的定义

    class base(models.Model):user models.ForeignKey(User)class Meta:abstract True以上是抽象基类的定义&#xff0c;只有一个公用字段user&#xff0c; class A(base):applier models.ForeignKey(User)那么是会报错的&#xff0c;如下&#xff1a; CommandError: One or mor…...

    2023/3/28 15:51:08
  10. django 1.7+ default_permissions

    由于做Caption要做权限设计。在核心类的设计的时候需要做好权限的基础设计。django 1.7以后 django.db.modes新增特性 default_permissions&#xff0c;官方文档语焉不详。 决定自己探索下&#xff0c;不想一一分析代码&#xff0c;遂引入bug&#xff0c;直接观察核心线路。 引…...

    2023/3/28 15:51:07
  11. C++内存分配

    分配方式详解 栈&#xff0c;就是那些由编译器在需要的时候分配&#xff0c;在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中&#xff0c;位于用户虚拟地址空间顶部的是用户栈&#xff0c;编译器用它来实现函数的调用。 堆&#x…...

    2023/3/28 15:51:07
  12. C++的参数

    C支持可变参数的函数&#xff0c;这里的意思是C支持函数带有可变数量的参数&#xff0c;最常见的例子就是我们十分熟悉的printf()系列函数。我们还知道在函数调用时参数是自右向左压栈的。如果可变参数函数的一般形式是&#xff1a;f(p1, p2, p3, …)&#xff0c;那么参数进栈&…...

    2023/3/28 15:51:06
  13. 浅谈python的import

    动态加载模块&#xff1a; 使用__import__ c__import__(sys)等价于 import sys不过前者可以在执行时决定。 静态加载&#xff1a; 也就是常规的import from xxx import yyyor import xxx.yyy xxx的最小粒度是文件&#xff0c; yyy的最小粒度是文件中的类/变量/函数。 import寻找…...

    2023/3/28 15:51:06
  14. python 模块之间的变量共享

    才疏学浅&#xff0c;只知道两种方式&#xff1a; 1. 通过__builtin__实现&#xff1a; builtin1.py import __builtin__ __builtin__.some_global_var_among_modulesblablablabuiltin2.py import builtin1 print some_global_var_among_modules2. 通过类的静态属性实现 A.py c…...

    2023/3/28 15:51:05
  15. hive select * from和select 字段 from区别

    select * from tbl_name limit 1&#xff0c;则不需要执行mapreduce任务&#xff0c;直接就可以读取相应的数据。 select 字段 from tbl_name limit 1&#xff0c;则需要执行相应的MapReduce任务&#xff0c;所以操作的时间很长。...

    2023/3/28 15:51:05
  16. Hive中SELECT TOP N的方法(order by与sort by)

    我想说的SELECT TOP N是取最大前N条或者最小前N条。 Hive提供了limit关键字&#xff0c;再配合order by可以很容易地实现SELECT TOP N。 但是在Hive中order by只能使用1个reduce&#xff0c;如果表的数据量很大&#xff0c;那么order by就会力不从心。 例如我们执行SQL&#xf…...

    2023/3/28 15:51:04
  17. python日志浅析

    输出日志对于追踪问题比较重要。 默认logger(root) python使用logging模块来处理日志。通常下面的用法就能满足常规需求&#xff1a; import logging logging.debug(some debug level info....)#debug级别消息 logging.info(some info level info...)#info级别消息 logging.war…...

    2023/3/28 15:51:04
  18. Hive中的join

    join 等连接 只有等连接才允许。select a.* from a join b on a.id b.id select a.* from a join b on (a.id b.id and a.department b.department)不等连接是不允许的。select a.* from a join b on a.id <> b.id在使用join写查询的时候有一个原则&#xff1a;应该将…...

    2023/3/28 15:51:02
  19. django rest framework 的url标签的问题

    如何在模板中引用一个在rest framework中的url&#xff1f; urls.py from django.conf.urls import patterns, url from .views import MenuViewSeturlpatterns patterns(,url(r^aaa/$,MenuViewSet.as_view({get: list}), namemenu_list))使用ViewSet的as_view方法&#xff0c…...

    2023/3/28 15:51:02
  20. backbone模型层浅析

    Model层有两个类&#xff1a; Model, Collection 1.Model 不翻文档&#xff0c;我们用代码说话。 首先分析下类。 var myM Backbone.Model.extend({})//构造一个Model类&#xff0c;myM这个类居然是空的&#xff0c;没有官方所说的那么多属性啊&#xff0c;难道underscore失灵…...

    2023/3/28 15:51:01
  21. shell中特殊变量$0 $1 $# $$ $! $?的涵义

    $0:执行脚本的名字$*和$:将所有参数返回$#:参数的个数$_:代表上一个命令的最后一个参数$$:代表所在命令的PID$!:代表最后执行的后台命令的PID$?:代表上一个命令执行是否成功的标志&#xff0c;如果执行成功则$? 为0&#xff0c;否则不为0...

    2023/3/28 15:51:00
  22. hive group by

    在一个query里可以出现多个聚合函数&#xff0c;但是一个query语句里2个聚合函数只能有一个distinct。...

    2023/3/28 15:50:59
  23. backbone django csrf_token的问题

    由于这个加入了token的验证&#xff0c;因此在backbone调用Model/Collection的save时会失败&#xff0c;错误403。&#xff08;这里不讨论劫持重发的问题&#xff09; 解决方案是&#xff1a;修改xmlHttpRequest的header信息&#xff0c;方法如下&#xff1a; m.save({name:asd…...

    2023/3/28 15:50:58
  24. 如何设计高效的缓存系统

    缓存系统...

    2023/3/28 15:50:58
  25. backbone调试

    有一个谷歌的扩展程序&#xff1a;https://chrome.google.com/webstore/detail/backbone-debugger/bhljhndlimiafopmmhjlgfpnnchjjbhd 安装之。 这个工具的主要作用是&#xff0c;观察某个用户操作后&#xff0c;Backbone调用了哪些自己的接口。 demo演示地址&#xff1a; http…...

    2023/3/28 15:50:57
  26. rest api设计的一般原则

    本文参考自&#xff1a;http://www.ruanyifeng.com/blog/2014/05/restful_api.html,http://www.dongming8.cn/?p590 服务器端&#xff1a; 1. JSON形式&#xff1a; 请求method含义api建议格式(url) v1-版本号&#xff0c; 成功返回值失败码(典型)备注PUT 修改数据请求 (客户端…...

    2023/3/28 15:50:55
  27. django 技巧锦集

    1. 如何将model对象转化成一个dict&#xff0c;这在restful api的设计上会有用。 答案&#xff1a;使用django.forms.models的model_to_dict方法&#xff0c;demo如下&#xff1a; from django.forms.models import model_to_dict as m2d from django.contrib.auth.models impo…...

    2023/3/28 15:50:54
  28. strcpy与memcpy的区别

    strcpy和memcpy都是标准C库函数&#xff0c;它们有下面的特点。 strcpy提供了字符串的复制。即strcpy只用于字符串复制&#xff0c;并且它不仅复制字符串内容之外&#xff0c;还会复制字符串的结束符。 已知strcpy函数的原型是&#xff1a;char* strcpy(char* dest, const char…...

    2023/3/28 15:50:53
  29. 浅析mongoEngine的document对象

    引言&#xff1a; from mongoengine import * connect(local)class Test(Document):nameStringField(max_length32)t Test(nameTommy.Yu)方法描述DoesNotExistNoneMultipleObjectsReturnedNonecascade_save Recursively saves any references / generic references on an obje…...

    2023/3/28 15:50:52
  30. 对n个整数进行排序,时间复杂度为o(n),空间复杂度为o(1)

    假定你的数字范围在0到65535范围之内&#xff0c;定义一个数组count[65536]&#xff08;这个空间是常量&#xff0c;和n无关&#xff0c;所以是O(1) )&#xff0c;初值全部为0。那么假设有下面这些数字&#xff1a;10020030011906...那么对于每个这个数字&#xff0c;都做在cou…...

    2023/3/28 15:50:52

最新文章

  1. python的变量作用域问题

    偶然掉进了一个坑里。仔细分析了下原因。原来是变量作用域的问题。简单抽象如下&#xff1a; id1 #许多行代码 [id for id in range(10)] #许多行代码if id!1:#做一些事情pass else:#做另外一些事情结果由于id在 [id for id in range(10)]中受到了影响发生了变化&#xff0c;导…...

    2023/3/28 15:51:13
  2. 重载与覆盖

    简述 重载&#xff1a;是指允许存在多个同名函数&#xff0c;而这些函数的参数列表不同&#xff08;或许参数个数不同&#xff0c;或许参数类型不同&#xff0c;或许两者都不同&#xff09;。(1) 参数列表主要包括&#xff1a;参数的类型&#xff0c;参数的个数&#xff0c;参…...

    2023/3/28 15:51:13
  3. python list 的+、+=和extend操作

    据说后者在list很大的时候性能稍好。 于是测试了一把&#xff1a; import timedef time_cost(func):def _time_cost(*args,**kw):t1time.time()func(*args,**kw)t2time.time()return t2-t1return _time_costtime_cost def test_add(list_a,huge_list_b):return list_ahuge_list…...

    2023/3/28 15:51:12
  4. 引用与指针

    简介 引用就是某个目标变量的“别名”(alias)&#xff0c;对应用的操作与对变量直接操作效果完全相同。引用的声明方法&#xff1a;类型标识符 &引用名目标变量名。int a; int &raa; //定义引用ra,它是变量a的引用&#xff0c;即别名。  说明&#xff1a;&#xff08…...

    2023/3/28 15:51:11
  5. postgresql 函数存储过程 ; 递归查询

    函数&#xff1a;http://my.oschina.net/Kenyon/blog/108303 紧接上述&#xff0c;补充一下&#xff1a; 输入/输出参数的函数demo&#xff08;输入作为变量影响sql结果&#xff0c;输出作为结果返回&#xff09; create or replace function f_dept_salary_out2(int, out o_de…...

    2023/3/28 15:51:11
  6. 虚析构函数

    当派生类的对象从内存中撤销时一般先调用派生类的析构函数&#xff0c;然后再调用基类的析构函数。如果用new运算符建立了临时对象&#xff0c;若基类中有析构函数&#xff0c;并且定义了一个指向该基类的指针变量。在程序用带指针参数的delete运算符撤销对象时&#xff0c;会发…...

    2023/3/28 15:51:10
  7. python 正则表达式点号与'\n'符号的问题

    遇到了一个小虫&#xff0c;特记录之。 1.正则表达式及英文的处理如下&#xff1a; >>> import re >>> badfasdfasf<1safadsaf>23wfsa<13131> >>> pat re.compile(<.*?>) >>> pat.findall(b) [<1safadsaf>, <…...

    2023/3/28 15:51:10
  8. MySQL中的alter方法

    在表中添加新列add(after)alter table tbl_name add column col_name 字段类型 字段其他属性;例如&#xff1a;在id列后面添加name列。alter table student add column name varchar(20) not null after id.alter table tbl_name drop column col_name&#xff1b;删除表中的列…...

    2023/3/28 15:51:09
  9. django中抽象基类的Foreignkey的定义

    class base(models.Model):user models.ForeignKey(User)class Meta:abstract True以上是抽象基类的定义&#xff0c;只有一个公用字段user&#xff0c; class A(base):applier models.ForeignKey(User)那么是会报错的&#xff0c;如下&#xff1a; CommandError: One or mor…...

    2023/3/28 15:51:08
  10. django 1.7+ default_permissions

    由于做Caption要做权限设计。在核心类的设计的时候需要做好权限的基础设计。django 1.7以后 django.db.modes新增特性 default_permissions&#xff0c;官方文档语焉不详。 决定自己探索下&#xff0c;不想一一分析代码&#xff0c;遂引入bug&#xff0c;直接观察核心线路。 引…...

    2023/3/28 15:51:07
  11. C++内存分配

    分配方式详解 栈&#xff0c;就是那些由编译器在需要的时候分配&#xff0c;在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中&#xff0c;位于用户虚拟地址空间顶部的是用户栈&#xff0c;编译器用它来实现函数的调用。 堆&#x…...

    2023/3/28 15:51:07
  12. C++的参数

    C支持可变参数的函数&#xff0c;这里的意思是C支持函数带有可变数量的参数&#xff0c;最常见的例子就是我们十分熟悉的printf()系列函数。我们还知道在函数调用时参数是自右向左压栈的。如果可变参数函数的一般形式是&#xff1a;f(p1, p2, p3, …)&#xff0c;那么参数进栈&…...

    2023/3/28 15:51:06
  13. 浅谈python的import

    动态加载模块&#xff1a; 使用__import__ c__import__(sys)等价于 import sys不过前者可以在执行时决定。 静态加载&#xff1a; 也就是常规的import from xxx import yyyor import xxx.yyy xxx的最小粒度是文件&#xff0c; yyy的最小粒度是文件中的类/变量/函数。 import寻找…...

    2023/3/28 15:51:06
  14. python 模块之间的变量共享

    才疏学浅&#xff0c;只知道两种方式&#xff1a; 1. 通过__builtin__实现&#xff1a; builtin1.py import __builtin__ __builtin__.some_global_var_among_modulesblablablabuiltin2.py import builtin1 print some_global_var_among_modules2. 通过类的静态属性实现 A.py c…...

    2023/3/28 15:51:05
  15. hive select * from和select 字段 from区别

    select * from tbl_name limit 1&#xff0c;则不需要执行mapreduce任务&#xff0c;直接就可以读取相应的数据。 select 字段 from tbl_name limit 1&#xff0c;则需要执行相应的MapReduce任务&#xff0c;所以操作的时间很长。...

    2023/3/28 15:51:05
  16. Hive中SELECT TOP N的方法(order by与sort by)

    我想说的SELECT TOP N是取最大前N条或者最小前N条。 Hive提供了limit关键字&#xff0c;再配合order by可以很容易地实现SELECT TOP N。 但是在Hive中order by只能使用1个reduce&#xff0c;如果表的数据量很大&#xff0c;那么order by就会力不从心。 例如我们执行SQL&#xf…...

    2023/3/28 15:51:04
  17. python日志浅析

    输出日志对于追踪问题比较重要。 默认logger(root) python使用logging模块来处理日志。通常下面的用法就能满足常规需求&#xff1a; import logging logging.debug(some debug level info....)#debug级别消息 logging.info(some info level info...)#info级别消息 logging.war…...

    2023/3/28 15:51:04
  18. Hive中的join

    join 等连接 只有等连接才允许。select a.* from a join b on a.id b.id select a.* from a join b on (a.id b.id and a.department b.department)不等连接是不允许的。select a.* from a join b on a.id <> b.id在使用join写查询的时候有一个原则&#xff1a;应该将…...

    2023/3/28 15:51:02
  19. django rest framework 的url标签的问题

    如何在模板中引用一个在rest framework中的url&#xff1f; urls.py from django.conf.urls import patterns, url from .views import MenuViewSeturlpatterns patterns(,url(r^aaa/$,MenuViewSet.as_view({get: list}), namemenu_list))使用ViewSet的as_view方法&#xff0c…...

    2023/3/28 15:51:02
  20. backbone模型层浅析

    Model层有两个类&#xff1a; Model, Collection 1.Model 不翻文档&#xff0c;我们用代码说话。 首先分析下类。 var myM Backbone.Model.extend({})//构造一个Model类&#xff0c;myM这个类居然是空的&#xff0c;没有官方所说的那么多属性啊&#xff0c;难道underscore失灵…...

    2023/3/28 15:51:01
  21. shell中特殊变量$0 $1 $# $$ $! $?的涵义

    $0:执行脚本的名字$*和$:将所有参数返回$#:参数的个数$_:代表上一个命令的最后一个参数$$:代表所在命令的PID$!:代表最后执行的后台命令的PID$?:代表上一个命令执行是否成功的标志&#xff0c;如果执行成功则$? 为0&#xff0c;否则不为0...

    2023/3/28 15:51:00
  22. hive group by

    在一个query里可以出现多个聚合函数&#xff0c;但是一个query语句里2个聚合函数只能有一个distinct。...

    2023/3/28 15:50:59
  23. backbone django csrf_token的问题

    由于这个加入了token的验证&#xff0c;因此在backbone调用Model/Collection的save时会失败&#xff0c;错误403。&#xff08;这里不讨论劫持重发的问题&#xff09; 解决方案是&#xff1a;修改xmlHttpRequest的header信息&#xff0c;方法如下&#xff1a; m.save({name:asd…...

    2023/3/28 15:50:58
  24. 如何设计高效的缓存系统

    缓存系统...

    2023/3/28 15:50:58
  25. backbone调试

    有一个谷歌的扩展程序&#xff1a;https://chrome.google.com/webstore/detail/backbone-debugger/bhljhndlimiafopmmhjlgfpnnchjjbhd 安装之。 这个工具的主要作用是&#xff0c;观察某个用户操作后&#xff0c;Backbone调用了哪些自己的接口。 demo演示地址&#xff1a; http…...

    2023/3/28 15:50:57
  26. rest api设计的一般原则

    本文参考自&#xff1a;http://www.ruanyifeng.com/blog/2014/05/restful_api.html,http://www.dongming8.cn/?p590 服务器端&#xff1a; 1. JSON形式&#xff1a; 请求method含义api建议格式(url) v1-版本号&#xff0c; 成功返回值失败码(典型)备注PUT 修改数据请求 (客户端…...

    2023/3/28 15:50:55
  27. django 技巧锦集

    1. 如何将model对象转化成一个dict&#xff0c;这在restful api的设计上会有用。 答案&#xff1a;使用django.forms.models的model_to_dict方法&#xff0c;demo如下&#xff1a; from django.forms.models import model_to_dict as m2d from django.contrib.auth.models impo…...

    2023/3/28 15:50:54
  28. strcpy与memcpy的区别

    strcpy和memcpy都是标准C库函数&#xff0c;它们有下面的特点。 strcpy提供了字符串的复制。即strcpy只用于字符串复制&#xff0c;并且它不仅复制字符串内容之外&#xff0c;还会复制字符串的结束符。 已知strcpy函数的原型是&#xff1a;char* strcpy(char* dest, const char…...

    2023/3/28 15:50:53
  29. 浅析mongoEngine的document对象

    引言&#xff1a; from mongoengine import * connect(local)class Test(Document):nameStringField(max_length32)t Test(nameTommy.Yu)方法描述DoesNotExistNoneMultipleObjectsReturnedNonecascade_save Recursively saves any references / generic references on an obje…...

    2023/3/28 15:50:52
  30. 对n个整数进行排序,时间复杂度为o(n),空间复杂度为o(1)

    假定你的数字范围在0到65535范围之内&#xff0c;定义一个数组count[65536]&#xff08;这个空间是常量&#xff0c;和n无关&#xff0c;所以是O(1) )&#xff0c;初值全部为0。那么假设有下面这些数字&#xff1a;10020030011906...那么对于每个这个数字&#xff0c;都做在cou…...

    2023/3/28 15:50:52