渔夫JS1.5

渔夫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 <br/>");
include('/control/code.xx');
echo(ad(15,78)+"<br/>");//调用code.js 里定义函数 ad();
echo(sz.aa+"<br/>");
echo(sz.cc('',22).toString());//echo输出为字符
echo('<p>-------------------</p>');
var p1=new Person("小王", 22);

//console.log(p1);	xxjs的console.log没前端的全
echo("<br/>"+p1.say()+p1.sing()+"<br/>");
print("test");
print(1234214);
print(1.1);
echo("</br>"+typeof "str");
echo("</br>"+typeof 456);
var obj1 = {"name":"手鸡鸡","price":"11.2"};
console.log(obj1) 
echo("</br>");
print(obj1);
echo(JSON.stringify(obj1));
var obj2 = '{"name":"手鸡鸡","price":"11.2"}';
var obj=JSON.parse(obj2);
echo('<br/>name:'+obj.name+'');
var zz=''
var obj=JSON.parse(obj2,function(k,v) {
	if(v!='[object Object]'){zz+=v+"##";}
	 
});
echo('<br/>name:'+zz);
var a, b;
a = new Array(0,1,2,3,4);
a.push("ddd");
b = a.join("-");
echo('<br/>'+b);
echo("</br>数组长度:"+a.length+" "+a[5]);

function tt() { 
    return Date(); 
}
echo('<br/>'+tt());
for(i=0;i<5;i++){ 
	   echo('<br/>'+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('<br/>q.method:'+q.method);  echo('<br/>q.get:'+q.get['id']);
echo('<br/>q.path:'+q.path+' IP地址:'+q.remoteAddr); 
echo('<br/>q.sessionId:'+q.sessionId);
session.start();//开启session 以json格式存储 对应目录config\session\#.sessionId
session['键名']="我是session值";
echo('<br/>session:'+session['键名']);//其他语言可以根据sessionId读取上面文件输出
//加密
echo('<br/>MD5加密:'+md5('xxjs'));// md5('字符串',false,16)默认为,是否大写,32位 
echo('<br/>base64加密:'+base64.encode('xxjs'));//
echo('<br/>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('<br/>user表输出:'+row+rr[0]['name']+'<br/>');
	
}
// 获取全部行
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('<br/>请求路径:'+q.path+' IP地址:'+q.remoteAddr+' 域名:'+q.host+' 完整地址不带get:'+q.url+
	' 不带域名带get地址:'+q.uri+' cookies:'+q.cookies+' MIME类型:'+q.contentType); 
	echo('<br/>获取User-Agent:'+q.environ['HTTP_USER_AGENT']);//判断浏览器
	echo('<br/>获取sessionId:'+q.sessionId); //重新创建新的会话ID:q.createSessionId()
	session.start();//开启session 以json格式存储 对应目录config\session\#.sessionId
	session['键名']="我是session值"; 
	echo('<br/>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('<br/>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('<br/>'+f.readAll());//读取全部	=file.read(-1);
	//echo('<br/>'+f.read());//读取一行  f.read()//读取指定长度
	//echo('<br/>'+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;
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rllmqe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值