渔夫JS (无毒软件,有报毒请放行)
点击下载渔夫JS1.5安装包 >>
点击下载渔夫JS1.5绿色版 >>
点击下载渔夫JS1.5 FOR IIS >>
使用html+渔夫js 制作一个自己的 Apache+Php运行环境
网址 http://www.yufujs.com
渔夫JS介绍(体积只有1M的脚本语言,坑多多^^)
1,渔夫JS是个轻量级服务端脚本语言;
2,渔夫JS是个轻量级WEB服务端;
3,渔夫JS是个轻量级服务端集成环境面板;
A: 渔夫JS语言:两种模式
1,xxd.exe多线程版JS服务端 即是语言也是web服务器(体积只有1M。你只需要在你的windows系统 粘贴这个1M的程序[xxd.exe+xx.ini],就可以用了。)
非常轻量,直接和项目打包一起用,不用部署或者安装一大堆服务软件了 建议以服务模式运行,正式使用以服务模式运行
体积小是不是用的功能需要再下载呢?(不需要的) 渔夫js所有功能都使用windows自带的功能 所以体积小
2,xx-cgi.exe单线程异步(稳定版) fastcgi模式 支持IIS服务器(体积只有1M),点击查看渔夫JS在IIS上安装教程 简单 xx-cgi.exe 目前不能在apache,nginx下运行
渔夫JS支持mysql,sqlserver,redis,sqlite,access,nosql数据库,Mysql和MariaDB一样,access和xls一样,例子也通用
也支持com组件,dll动态库(需要安装对应运行库),并且可扩展和golang,java,python,php等代码交叉使用
入口文件是url.xx,示例文件在control目录下;点击查看渔夫JS在线演示
B:渔夫JS服务集成面板(WEB模式有例子代码):默认自带版本 渔夫JS1.5 | Apache 2.4.43 Win64 | Nginx 1.18.0 | MariaDB 10.5.0 x64 | Mysql5.5.28 | Redis 3.2 | Memcached1.2.6
你可以点击“安装”进行自动安装 如果你不喜欢这些版本,你可以自行去下载版本
如 apache 下载地址 https://www.apachelounge.com/download/
使用注意:
为保证进程的稳定性,请设置xxd.exe 右键-兼容性-以兼容模式运行这个程序 这样不容易进程出错(xxjs环境下,进程出错会立刻重置进程,所以不用担心)
1,命令操作模式 (如果不是安装版,需要手工添加环境变量,或切换到xxjs目录,执行命令)
2,面板操作模式
3,WEB网页操作模式 懒,不想做,有关xxjs对服务程序如apache,mysql的操作例子control/service.xx,其他基本都一样……
1、基本用法:请看JavaScript教程用法是一样的
2、对象,post,get,加密,include文件加载 对应文件control/index.xx
3、post,postjson,文件上传,删除演示 txt,ini操作 对应文件control/post.xx
4、C++ dll动态库操作,(Golang)dll库操作例子 对应文件control/com.xx
5、VB com组件操作例子 对应文件control/com.xx
6、Java类库,jar程序运行,操作例子 对应文件control/com.xx 测试版本 jre-8u251-windows-x64
7、Python模块文件操作例子 对应文件control/com.xx
8、运行PHP文件,PHP函数库文件操作例子 对应文件control/com.xx 测试版本 php-7.4.7-nts-Win32-vc15-x64
9、windows服务应用程序操作例子 对应文件control/service.xx
--------------------数据库操作,模板引擎……---------------------------
数据库access操作查看列表,更多增 删 改 查 对应文件control/access.xx
数据库sqlite操作查看列表,更多增 删 改 查 对应文件control/sqlite.xx
数据库mysql操作查看列表,更多增 删 改 查 cmd操作 对应文件control/mysql.xx
数据库sqlserver操作查看列表,更多增 删 改 查 对应文件control/sqlserver.xx
--------------------与其他语言混写,对特殊版本开放……---------------------------
在xxjs代码里使用c代码,对应文件control/c.xx
在xxjs代码里使用python代码,对应文件control/python.xx
在xxjs代码里使用go代码,对应文件control/go.xx
在xxjs代码里使用java代码,对应文件control/java.xx
在xxjs代码里使用php代码,对应文件control/php.xx
代码例子 index.xx
echo("HELLO->XXJS
");
include('/control/code.xx');
echo(ad(15,78)+"
");//调用code.js 里定义函数 ad();
echo(sz.aa+"
");
echo(sz.cc('',22).toString());//echo输出为字符
echo('-------------------
');
var p1=new Person("小王", 22);
//console.log(p1); xxjs的console.log没前端的全
echo("
"+p1.say()+p1.sing()+"
");
print("test");
print(1234214);
print(1.1);
echo(""+typeof "str");
echo(""+typeof 456);
var obj1 = {"name":"手鸡鸡","price":"11.2"};
console.log(obj1)
echo("");
print(obj1);
echo(JSON.stringify(obj1));
var obj2 = '{"name":"手鸡鸡","price":"11.2"}';
var obj=JSON.parse(obj2);
echo('
name:'+obj.name+'');
var zz=''
var obj=JSON.parse(obj2,function(k,v) {
if(v!='[object Object]'){zz+=v+"##";}
});
echo('
name:'+zz);
var a, b;
a = new Array(0,1,2,3,4);
a.push("ddd");
b = a.join("-");
echo('
'+b);
echo("数组长度:"+a.length+" "+a[5]);
function tt() {
return Date();
}
echo('
'+tt());
for(i=0;i<5;i++){
echo('
'+i);
}
/* //获取请求 更多请查看 control/post.mjs文件
q=request 如 q.get[],q.post[],q.cookies[],q.postData(),q.postFileData(),q.method,q.path,q.url
*/
var q=request;
var id= request.get['id']; // $q.post;
echo('
q.method:'+q.method); echo('
q.get:'+q.get['id']);
echo('
q.path:'+q.path+' IP地址:'+q.remoteAddr);
echo('
q.sessionId:'+q.sessionId);
session.start();//开启session 以json格式存储 对应目录config\session\#.sessionId
session['键名']="我是session值";
echo('
session:'+session['键名']);//其他语言可以根据sessionId读取上面文件输出
//加密
echo('
MD5加密:'+md5('xxjs'));// md5('字符串',false,16)默认为,是否大写,32位
echo('
base64加密:'+base64.encode('xxjs'));//
echo('
base64解码:'+base64.decode(base64.encode('xxjs')));
//string.save("/control/index.html","空白文档",true);//生成文件 带true 为追加内容
response.headers['author'] ="虫圣"
response.headers['Server'] ="渔夫js-web服务器"
response.headers['X-Powered-By'] ="渔夫js1.3"
数据库代码例子 sqlite
//访问模式1 http://127.0.0.1:805/sqlite/list
var db=sqlite("/test.db");//链接数据库
//整理下写法,,
if(!db.existsTable("cs_user") ) {
db.exec( "CREATE TABLE cs_user( name,pass);" );
}
var add=function() {//插入测试数据
var ok = db.exec("INSERT INTO [cs_user] VALUES ( @name,@pass);",{'name': '小张','pass':'123456'})
if(ok!=null){return echo('成功'+ok);}else{return echo('错误'+ok);}
}
var up=function() { //更新
var ok=db.exec("UPDATE `cs_user` SET `name`='小王' WHERE name='小张' ");
if(ok!=null){return echo('成功'+ok);}else{return echo('错误'+ok);}
}
var del=function() { //删除
var ok=db.exec("DELETE FROM `cs_user` WHERE name='小王' ");
if(ok!=null){return print('成功');}else{return print('错误');}
}
var row=function() { //查询
var row = db.getJson("SELECT * FROM [cs_user] WHERE name='小张' LIMIT 1");
var rr=JSON.parse(row);
print(rr);
return echo('
user表输出:'+row+rr[0]['name']+'
');
}
// 获取全部行
var list=function() {
var tab = db.getJson("SELECT * FROM [cs_user] "); //获取全部行 json对象数组字符串
var list=JSON.parse(tab);
db.close() //关闭数据库连接
var obj ={title:"我是title",data:list}
print(obj); //直接输出
var html=模板('/tpl/tpl.htm',obj); //使用模板输出 utf-8
//string.save("/test/sqlitelist.html",html);//生成静态页
return echo(html) //页面输出内容
}
基础操作例子
//response.contentType = "text/json"
//response.headers['Access-Control-Allow-Origin'] = "*";
//response.headers['Access-Control-Allow-Headers'] = "*";
/* //获取请求
$q=request 如 $q.get[],$q.post[],$q.cookies[],$q.postData(),$q.postFileData(),$q.method,$q.path,$q.url
*/
var json =function() { //postjson提交,前端post提交需要指定contentType:"application/json",
var p=JSON.parse(request.postData());
var ss={'name':p['name']};
return echo(JSON.stringify(ss));
}
var post =function() { //post提交
var p=request.post;
var ss={'name':p['name']};
return print(ss);
}
var $q=request;
//上传文件图片类,
var file =function() {
var f = $q.postFileData();
var cc={"ok":300}
if(!f){cc['msg']='没有要上传的数据'; return print(cc);}
var size=f.file.contentLength/1024;//计算大小限制
var fname=f.file.filename;//获取文件名
var ftype=f.file.contentType;//"content-type":"image/png" 文件类型
var arr=ftype.split('/');
if(arr[0]!="image"){cc['msg']='上传文件类型不对'; return print(cc);} //这里要加判断
var upload="/uploads/xxjs/"; //前面+'/'现对站点根目录 没有相对 程序实在目录
if(!fsys.isDir(upload)){fsys.createDir(upload); //创建目录
string.save(upload+"index.html","空白文档");}
var wjm=upload+"mt"+md5(f.file.value(),'',true)+"#"+f.file.filename; //md5 16位大写
f.file.save(wjm);
cc['ok']=200;cc['msg']='上传成功';cc['pic']=wjm;
return print(cc);
}
//在服务端使用异步请求
var aj= function() {
var obj='{"tel":"331147147","topid":"1149","name":"22"}'
var cc=ajax.post('http://crm.ccxcc.cc:805/demo/cc2',obj);//正确返回回调,出错返回false
return print(cc);
}
//base64上传文件 未测试大概就是这么用^^
var filebase =function() {
var base64 = string.replace(request.post['image'],"^data\:image\/(\w+);base64,", ""); // 根据实际前端获取的base64 取值
base64 = base64.decode(base64);
string.save("\文件名", base64);
}
var 其他 =function() { //post提交
//request.get[],request.post[]
//echo(request.get['id']);
//if(request.method!="GET"){echo("错误,请使用GET请求");}
//request对象操作(获取用户请求信息和提交的数据)
var q=request;
echo('
请求路径:'+q.path+' IP地址:'+q.remoteAddr+' 域名:'+q.host+' 完整地址不带get:'+q.url+
' 不带域名带get地址:'+q.uri+' cookies:'+q.cookies+' MIME类型:'+q.contentType);
echo('
获取User-Agent:'+q.environ['HTTP_USER_AGENT']);//判断浏览器
echo('
获取sessionId:'+q.sessionId); //重新创建新的会话ID:q.createSessionId()
session.start();//开启session 以json格式存储 对应目录config\session\#.sessionId
session['键名']="我是session值";
echo('
session:'+session['键名']);
//其他语言可以根据sessionId读取上面文件输出
//php语言例子 $_SESSION = json_decode(file_get_contents('config/session/#.'.$_COOKIE["MYSESSID"].''),true);
//response对象操作(响应请求并输出网页内容)
//此处在浏览器按F12看 Network->Headers
var p=response;
p.contentType = "text/html" //默认
p.status ="200 OK"
p.headers['author'] ="虫圣"
p.headers['Server'] ="渔夫js-web服务器"
p.headers['X-Powered-By'] ="渔夫js1.3"
p.cookies["name"]= {value:"cookiessss手动阀收到",expires:'',maxAge:3600} //cookies值 过期时间 //过期秒数
//更多浏览器按F12看 Network->Headers
echo('
cookies:'+q.cookies["name"]);
return;
}
//读取文件列表
var filelist=function(){
//var size=fsys.formatSize(fsys.getSize("/uploads/xxjs/1.png"));
//echo("文件大小:"+size);
var isf=fsys.searchFile("123.jpg","/uploads/xxjs"); //判断指定目录是否包含文件,,有-》返回路径,没有-》空
print(isf);
var cc=fsys.eachFile("/uploads/xxjs");//遍历目录获取文件列表
print(cc);
//var ok=fsys.del("/uploads/xxjs/1.png");//删除文件 成功返回true
//print(ok);
return;
}
//ini文件操作 不建议使用,
var ini=function(){
var ini=fsys.ini("/xx.ini"); //这个是配置文件,,别改已有的^^
var wd=ini.read("服务端","默认文档"); //读取
echo(wd);
ini.write("服务端","新的值","我是新的值"); //写入|修改
return;
}
//text文件操作
var txt=function(){
//var txt=string.load("/control/test.txt"); //读取
//string.save("/control/test.txt",'我是写入的内容 ',true);//追加模式写入
//echo(txt);
var f=fsys.file("/control/test.txt","a+");//默认只读模式打开 r+读写模式打开 w+读写模式打开 a+读写追加模式打开
//echo('
'+f.readAll());//读取全部 =file.read(-1);
//echo('
'+f.read());//读取一行 f.read()//读取指定长度
//echo('
'+f.readTo('')); //读取到指定字符结束
//f.write('\r\n 3写入内容'); //写入内容
//f.close()
return;
}
//在服务端 运行exe 不安全不要用,可在mjs.ini文件里设置isexe=N 关闭 Y开启
var exerun=function() {
//var ok1;
var ok2=exe("cmd.exe","/c type nul>在根目录创建文件.txt ","Wait"); //隐藏窗体运行,等待窗体结束关闭返回 可用于备份mysql数据库 mysql.mjs里有例子
exe("notepad.exe");//运行exe程序 ,打开记事本
return ok2;
}