# 从VFP的初学者到上线自己的水果商城,只因为做对这一步

“ 问学必有师,讲学必有友   ——陆佃”

大家好,我是绿茶,多年前曾用VFP写了点非常简单的小程序,一直是单位或自己为提高效率所做的权宜之计,简陋至极。但自从出现了B/S架构,一度和许多人一样,几乎要放弃VFP了,直到遇到了加菲猫老师和他的祺佑框架。

加菲猫老师强调,使用框架能少写80%左右的代码,能让你专注于业务逻辑,事实证明,这绝对不是一句空话。

# BS真的好看也不难

上面两图,是我用框架给单位做的一个应用中的截图。比如第1个图的首页,其实使用框架,后台的代码很简洁,核心代码如下

Procedure getUser
  oDbHelper = Newobject("MSSQLHelper","MSSQLHelper.prg")
  TEXT TO lcSqlCmd NOSHOW textm
    SELECT code,name,value FROM branch
  ENDTEXT
  oDbHelper.SQLQuery(lcSqlCmd,"branch")

  oJsons = Createobject("foxjson",{})
  Scan
    oJson = Createobject("foxjson")
    oJson.Append("value",branch.Value)
    oJson.Append("name",branch.Name)
    oJsons.Append(oJson)
  Endscan
  oJson = Createobject("foxjson")
  **这期间都是反复利用foxjson,形成JSON数据,代码省略
  rJson.Append('data',oJsons)
  …
  oMonJson = Createobject("foxjson")
  …
  oJsons = Createobject("foxjson",{})

  rJson.Append('week',oMonJson)
  rJson.Append('value',oJsons)
  Return rJson.tostring()
Endproc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

后将上面rJson返回的结果提交给前端,前端调用eCharts,就可以轻松生成有图表的界面了。

这里的MsSqlHelper类,让我们不用关心数据库如何连接,句柄如何创建,我们需要做的,仅是需要new一个对象,然后去使用就好了,框架把里面的东西已经封装好了,我们开心去用就行。

还有,和前端交互,需要使用的JSON,在这里也可以轻松操作,只需反复折腾foxjson,需要什么样的JSON数据,按自己的想法组装就是了。

也就是说,有了框架,我们又可以利用VFP进行愉快地玩耍了,岂不是一件美事?

关于框架,不想说太多,大家已经有目共睹,以下说点关于小程序上线前出现的插曲。

# 我的水果商城上线

最近由于亲戚有个水果店铺,想做个小程序,实现对一些热销抢购水果的线上交易、库存控制等。因为在群里参加了商城的众筹,前期工作也都做得差不多了,然后按部就班,购买云服务器和域名,申请ICP备案,然后域名解析,申请SSL证书等,万事俱备,开始部署到云服务器。

按照步骤,先将uni-app的代码打包发行,然后导入到微信开发者工具,最后提交代码。一切搞定后,信心满满,开始测试。

结果是不能访问数据库,光有界面,点击进入分类,所有图片全部不能显示,排查了半天,感觉所有步骤都没有问题。无奈之下,只得请求曾老师帮忙救火。

曾老师不但技术厉害,人也很热情,看到我发的请求,老师及时帮我排除了故障,程序得以顺利上线。以下是根据老师此次帮我排除故障的步骤,和前期老师发过的项目部署到服务器的文档整理而成,供大家参考。

# 排查安全证书的问题

如下图,在自己的网站上点右键—编辑绑定。

顺便看是否配置了443端口(小程序使用),或80端口(B/S端程序使用),然后选绑定的443端口,点编辑,然后看下面的SSL证书是否已正确绑定。

# 检查处理程序映射

上面的步骤确认没有问题,下一步,是到云服务器上,看cgi是否配置成功。

①找到处理程序映射,先看是否已配置了CgiModule,如上图。

②如果已配置,再选右面的的编辑权限功能,打好勾,如下图。

③处理程序映射非常关键,许多时候项目跑不起来,都是这里出了问题。确保以上步骤没有问题后,再到网站的根目录中,找到web.config文件,打开检查其配置是否确实正确。

④假如网站名称为qiyu,VFP编译的可执行文件存放的目录为qiyuserver,那web.config的正确配置应该是:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
           <add name="qiyu" path="*.fsp" verb="*" modules="CgiModule" scriptProcessor="c:\qiyuserver\qiyuserver.exe" resourceType="Unspecified" requireAccess="Script" />
        </handlers>
    </system.webServer>
</configuration>
1
2
3
4
5
6
7
8

⑤确保以上配置都没有问题,那cgi基本就配置好了。

# 检查云服务器安全组中80端口和443端口是否开放

这里真的是坑苦了我,上次我使用的是腾讯的云服务器,服务器操作系统为 Windows Server 2008 R2 企业版,我按曾老师部署项目的步骤,非常顺利就把项目放到了服务器上,运行完全没有问题。

这次使用的阿里的服务器,操作系统为Windows Server 2012 R2 数据中心64位中文版,我仍按以前的步骤,结果就出现了数据库不能访问的问题。还是曾老师厉害,他马上意识到是安全组的端口没有打开。

入云服务器控制台,选安全组,进入配置规则,在下图中选”入方向”中的“手动添加”,将80和443的端口添加进去。

然后,可以用telnet命令,看80和443端口是否可以访问。

如果以上配置全部没有问题,可以到浏览器中检验一下fsp是否能跑起来,验证方法非常简单,但很有效。比如你申请的域名是baidu.top,那在地址栏输入http://baidu.top/1.fsp,如果你能看到如下的返回:

{ "errno": 1, "errmsg": "File '1.prg' does not exist.", "success": "false", "errorMsg": "File '1.prg' does not exist.", "total": 0, "rows": "[ ]" }
1

那恭喜你,基本上已经没有问题了,这说明fsp已经能正确跑起来了。如果没有看到这样的返回,那说明革命尚未成功,仍需继续努力…

下图为曾老师帮我排除故障后,程序运行的截图,因为后台没有添加多少东西,前期的需求也相对简单,所以其实真正实现的内容也比较简单,大神们就不要见笑了。就说这么多吧,以后有空,再继续和大家一起分享,一起学习!

VFP版的小程序商城终于顺利运作了。