想自己上线微信小程序一定要会代码?
最近在录制一些Bmob微信小程序视频教程,没来得及更新本教程教你如何免费发布一款自己微信小程序。
微信小程序门槛已经下降到个人了,很多不会写代码的人也想免费上线一款自己的小程序,该如何做到?
他有这些要求:
- 无需写代码
- 整个发布到上线最好不要超过10分钟
- 我要保留整个小程序的源码,以防止下次上线需要。
- 项目源码安全无后门、有详细的文档说明
- 稳定、安全。
- 免费、不花一分钱。
本视频10分钟上线自己微信小程序,一一解决这些问题。
最近在录制一些Bmob微信小程序视频教程,没来得及更新微信小程序门槛已经下降到个人了,很多不会写代码的人也想免费上线一款自己的小程序,该如何做到?
他有这些要求:
本视频10分钟上线自己微信小程序,一一解决这些问题。
最近有人问到不用VUE等前端框架,只想简单在一个html显示我的数据库数据。如何实现,这里写个例子 js 代码实现不到10行

<html>
<head>
<title>Bmob后端云测试</title>
<script src="Bmob-1.4.2.min.js"></script>
<script>
Bmob.initialize('9b41c92db4976a1bae59d554f0c3fc4a', '7fa2bb3451025d9da1f234e700ea161a')
const query = Bmob.Query("newslist");
query.find().then(res => {
console.log(res)
for (var i = 0; i < res.length; i++) {
document.write(`${i}:${res[i].title}-----${res[i].createdAt}<br>`)
};
});
</script>
</head>
<body>
</body>
</html>最后附上JS操作数据库文档
https://bmob.github.io/hydrogen-js-sdk/#/?id=查询所有数据
最近新开发一套系统,需要建立数据库,数据表文档已经写好,需要建立数据库。看图:

这套系统大概有十几个这样的数据表,每个表的字段类型、长度、描述都需要填写,算是一个重复工作,想到可以写个小脚本,自动生成创建表结构。生成结果看下面代码
CREATE TABLE `admin_financial` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`portId` varchar(50) NOT NULL COMMENT '端口id',
`weixinId` varchar(50) NOT NULL COMMENT '原始ID',
`name` varchar(50) NOT NULL COMMENT '公众号名',
`opUser` varchar(50) NOT NULL COMMENT '操作者',
`companyName` varchar(50) NOT NULL COMMENT '企业名称',
`sum` int(11) NOT NULL COMMENT '金额(分)',
`type` int(11) NOT NULL COMMENT '操作类型',
`accountType` int(11) NOT NULL COMMENT '账户类型',
`time` timestamp NOT NULL COMMENT '时间',
`billNo` varchar(50) NOT NULL COMMENT '账单编号',
`status` int(11) NOT NULL COMMENT '状态',
`dstAccountId` varchar(50) NOT NULL COMMENT '目标账户',
`dstAccountType` int(11) NOT NULL COMMENT '目标账户类型',
`dstAuthAccount` varchar(50) NOT NULL COMMENT '目标授权账户',
`dstSubAccount` int(11) NOT NULL COMMENT '目标子账户',
`srcAccountId` varchar(50) NOT NULL COMMENT '来源账户',
`srcAccountType` int(11) NOT NULL COMMENT '来源账户类型',
`srcAuthAccount` varchar(50) NOT NULL COMMENT '来源授权账户',
`srcSubAccount` int(11) NOT NULL COMMENT '来源子账户',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='财务记录表';这里我使用了unix* 系统都可以跑的shell 来写。主要用到awk 命令。
首先建立个源数据文件,用来放文档格式。我这里复制文档的格式是这样。
portId 端口id String spid15e226338b
weixinId 原始ID String gh_94415782f4da
name 公众号名 String xxx
opUser 操作者 String xxx
companyName 企业名称 String 信息技术有限公司
sum 金额(分) Int 5020(50.2元)
type 操作类型 Int 1:转账;2.退款
accountType 账户类型 Int 3:赠送;4:现金;14:信用金固定
time 时间 Date 2018-06-01 00:11:22
billNo 账单编号 String xxxx
status 状态 Int 1
dstAccountId 目标账户 String spid15e226338b
dstAccountType 目标账户类型 Int spid15e226338b
dstAuthAccount 目标授权账户 String
dstSubAccount 目标子账户 Int 14
srcAccountId 来源账户 String spid15e226338b
srcAccountType 来源账户类型 Int spid15e226338b
srcAuthAccount 来源授权账户 String
srcSubAccount 来源子账户 Int 14然后写脚本
#!/bin/bash
# author:Magic
# url:www.bmob.cn
# table="default_table"
if [ -n "$1" ]; then
table=$1
else
table="default_table"
fi
if [ -n "$2" ]; then
comment=$2
else
comment = ""
fi
cat dx.txt |awk -F " " '
BEGIN{count=0; table= "'$table'";comment="'$comment'"} {name[count] = $1;c[count] = $2;
t[count]=$3;count++;};
END{
print "CREATE TABLE `" table "` ("
print "`id` int(11) unsigned NOT NULL AUTO_INCREMENT,"
for (i = 0; i < NR; i++){
printf "`"name[i]"` "
if(t[i]=="Int"){
printf "int("11") "
}else if(t[i]=="String"){
printf "varchar("50") "
}else if(t[i]=="Date"){
printf "timestamp NULL "
}else if(t[i]=="Float"){
printf "float(10,4) "
}
printf "NOT NULL"
print " COMMENT \""c[i]"\","
}
print "PRIMARY KEY (`id`)"
print ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT= \""comment"\";"
}'
如何执行:
命令行执行 sh db.sh tableName 财务表
* sh 执行shell
* db.sh 脚本名称
* tableName 表名称
* 财务表 描述效果截图
这样就可以实现复制文档表,然后就生成SQL,如果需要最后去数据库手动设置下索引,这样就完美快速的基于文档,生成Sql结构,大家有更好的方法,也可以一起交流。
篇首:俺自己很low,写的东西也很low,各位前辈已经各种总结的,so,大家轻喷啊,俺只是为了记录一下子。
刚刚不经意间查看关于php加速方面的消息,看到了一句话“lamp结构的瓶颈在于M”,感觉是真知灼见,当然这是在理想状态下的情况。对于实际情况下的生产环境来说,需要解决的问题是多种多样的,l-a-
m-
p在不同阶段需要优化的点是不同的,虽然通过努力最终的瓶颈在于M,但是期间的各种努力也是不容忽视的。下面我就意识流的总结一下,在网站生产环境遇到的各种问题。
以下是之前遇到问题的各种汇总:
1、php内的sql代码性能存在问题
这个存在于两方面,一个是sql本身优化不够,另外一个方面是随着数据量的增加,某些性能问题会逐渐暴露。
2、apache处理模式造成的内存消耗
由于apache是以进程的形式,同步阻塞式的处理http请求,so,当网页本身加载元素过多的话,会造成大量的
http进程并发,消耗服务器大量的内存,导致访问缓慢或者异常。
解决办法很是简单,主要有一下几个方面
a、动态页面转成静态页面。
b、转成lnamp的模式,图片等静态资源由nginx进行处理,减少http进程数量
3、CDN服务的使用
这个并不是性能问题,而是为了解决用户访问的页面加载速度问题,以及不同网络之间的延迟问题。
具体使用效果是非常不错的,会大大的改善各地用户的访问速度,土豪公司可以自建CDN,中小公司
选择第三方服务也是不错的选择。
4、缓存的使用
这个有两个方面的缓存,其中主要的缓存是数据也就是动态方面的缓存
使用的软件主要有redis以及memcache(开源用的爽爽哒)
这两个软件都是针对php与mysql之间的请求进行缓存,减少与mysql的直接交互,提高访问速度。
5、apache的负载均衡,mysql的读写分离
即便增加了CDN、缓存,优化了apache的页面,但是高并发的问题依然会随着用户量的增加而慢慢出现,那么这个时候
就要发大招了,扩!容!硬!件!。永远都好使的大招,用完即生效。我们现在主要使用的是nginx+apache的负载均衡方式。
而mysql的读写分离也so easy,使用主从复制即可。对于及时性要就不是太高的网页访问,问题不大。
6、奇葩问题粗现了!!!
Then,该优化的俺们都优化了,前辈的经验也是各种借鉴,最后俺们发现页面访问还是慢得想让用户注销。问题到底在哪?
又经过了艰苦卓绝的调查与研究,最后发现,上一个离职的哥们开放的一个权限系统(所有网页加载都会用),没有关闭
debug,我去!我一口老血喷在了显示器上啊!苍天啊,我曾经一度怀疑自己是不是在做无用功啊!
这里不是挑起运维与研发的阶级矛盾,而是总结经验教训,以后不在走弯路!
先到这吧!以后有了经验再补充!
由于没有数据,这次需要拿一些测试数据放到数据库。 这里想到本地采集,大家可以随意用任何后端语言,Python,PHP,Golang,Java,nodejs等等, 这里我就不用其他语言,使用接近JavaScript语法的,nodejs,采集后生成CSV文件。
这里找到一个采集的地址:
http://www.jiakao.com/cnty/web/km1_tc_new.php?q=1
let table = $('table');
table.each(function (index, item) {
let x = $(this).text();
console.log(x) 
由于数据库,标题title是一个单独字段,这里先把title取出来。
let table = $('table');
table.each(function (index, item) {
let x = $(this).find("tr>td").eq(0).text();
let t = x.split('\n\t');
console.log(t)
});
这里的数据[1]就是标题数据

这里不细说了,后面我会放上代码,大家自己看。 无非就是拿到A、b、c、d结果,放到一个对象里面,跟导入的格式一致就行。
Bmob控制台导入CSV,导入后,效果如下。

小程序里面,我们测试下。

放代码
let http = require('http');
let fs = require('fs');
let cheerio = require('cheerio');
let request = require('request');
let iconv = require('iconv-lite');
let i = 0;
let url = "http://www.jiakao.com/cnty/web/km1_tc_new.php?q=1";
//初始url
function fetchPage (x) { //封装了一层函数
startRequest(x);
}
function startRequest (x) {
//采用http模块向服务器发起一次get请求
http.get(x, function (res) {
let html = ''; //用来存储请求网页的整个html内容
let titles = [];
res.setEncoding('binary'); //防止中文乱码
//监听data事件,每次取一块数据
res.on('data', function (chunk) {
html += chunk;
});
//监听end事件,如果整个网页内容的html都获取完毕,就执行回调函数
res.on('end', function () {
html = iconv.decode(html, 'gb2312');
let $ = cheerio.load(html); //采用cheerio模块解析html
let table = $('table');
console.log('help,choseList,title,video,type,bType,bModels,bSubjects,pic')
table.each(function (index, item) {
let t;
let d;
let tArr = [];
let choseList = [] //{""item"":""6个月""}
$(this).find("tr>td").each(function (i, items) {
// t = $(this).eq(0).text().split('\n\t');
t = $(this).text().split('\n\t');
if (i == 0) {
tArr.push(t[1])
}
d = $(this).text().trim()
if (i > 0 && i < 6) {
if (d.indexOf('A') != -1 || d.indexOf('B') != -1 || d.indexOf('C') != -1 || d.indexOf('D') != -1) {
let answerStr, answerArr;
// 获取正确答案
let okStr = $(this).parent().attr('onclick')
if (okStr != undefined) {
answerStr = okStr.substr(25, 3)
answerArr = answerStr.split(',')
}
d = d.split('、');
if (answerArr[0] == answerArr[1]) {
choseList.push({ "\"isChose\"": true, "\"item\"": "\"" + d[1] + "\"" })
} else {
choseList.push({ "\"item\"": "\"" + d[1] + "\"" })
}
}
}
})
console.log(`,"${JSON.stringify(choseList)}",${tArr},,1,413405afba,1,1,`)
});
})
}).on('error', function (err) {
console.log(err);
});
}
fetchPage(url); //主程序开始运行总结:
Bmob数据库支持CSV导入, 我们把采集到的数据输出为一个CSV即可,然后后台点击导入,采集到数据后,进行处理,分四步。
由于这里100题只是为了做Demo,时间第一,并没有采集图片,如果正式上线,还需要采集图片并上传。时间关系,这一节就到这,有问题可以在下面评论。