lbs@node

lbs@node

2018年的4月26日,我在自己的idea清单中,加上了一条“基于 nodejs 移植 lbs 博客系统”。

一、lbs 是什么东东?

它是一款比较小众的博客程序,是基于微软的ASP环境运行的,作者是SiC,最后的版本应该是 2.0.313,更新于 2007年7月3日。

5409-20181228152645218-1586156576.png

5409-20181228152651242-2109648608.png

(注:整理了一份代码到Git上,见:https://gitee.com/web3d/lbs )

二、扯淡

ASP在我那个年代,是学生能接触到的最好的编程语言和环境,尽管它不是语言,但一直作为一种编程语言的代称。ASP 基于IIS Web服务器,借助于微软Windows系统的脚本宿主环境,支持运行VBScript和JScript两种脚本语言,版本大致在5.X范围。

那时大家编写 ASP 程序都只知道用 VBScript。而 lbs 能够被大家所铭记,则是因为它是基于 JScript 写的。尽管其中有少量代码混合使用了 VBScript,但这不妨碍我等文艺青年的逼格追求。

熟悉我的童鞋都知道,我是有丝丝个人站长情节的。虽然没有经历第一代站长像雷布斯、小马哥、丁三石那个年代,但也算是经历过了草根站长的中后期阶段。

到后来所谓Web 2.0的时代,只剩下博客和博主了。再现在的新媒体时代,满眼则只剩网红了。

说这些呢,只是为了间接说明当年研究过各种“建站”系统,而自己也搭过不少次的博客站点。其中但凡需要动态程序支持的,都没有坚持下来;而翻译的一个静态技术文章的站点,反而因为其信息本质的价值得以一直存活。所以后来也放弃了自建,改用第三方服务,如博客园。

但情结就是情结,对一个事物有了情结,除非你真的得到拥有过Ta,否则,就不可能真的放下,对吧,小龙。

三、源头

这种情结驱使我在idea清单中添加了很多类似的事项,一大半都是已经打勾了的,因为很多想法自己虽然没去实现,但已经有人实现了,或者仔细考虑过实在没有意义。

而剩下的那些里面,基于 Node.js 改造这款 lbs 博客程序的意义在哪呢?

今年一直在用Nodejs,但主要是围绕遗留的系统,还是N年前ES5时代的回调、ES6时代的yield,混合写法的产物,代码的可读性比较差,这样的系统也不会闲着没事去完全重构,投入产出比在那。那么,就只有自己拿些东西练手了。

但程序员,你知道的,都是死脑筋,眼里只有技术,很少会有还具备比较完整的产品idea,能自产自销的。所以,不拿一个现有系统去折腾,而只是随便写点demo也是没用的,得不到完整的项目经验积累。

这样,就想起来了以前用过的这套比较小型的博客系统,刚好是基于Js语法写的,然后想看看基于Nodejs这样的代码该如何写。

四、过程

基本过程是这样:

1、五一之前的那几天,正式开始研究。

  • 先解读了其代码组织结构,确定了基本的MVC方式的对应关系,比如lib、service、model、controller、view等;
  • 数据库原本是基于Access的,在SQLite、MongoDB、MysQL中选,最后决定MySQL;
  • 也做了框架选型,开始是想基于express/kraken 那一套,也让小部分功能界面跑起来了;也测试了国产的 thinkjs,基本在thinkjs下走了一遍流程,它是基于koa的,支持async/await了,代码可读性就能达到正常水平。
代码结构认知
1. 根目录下那些功能性代码文件如user.js 相当于是 每个功能的路由值 + 视图内容;
2. class 对应的是 Logic
3. source 对应是 控制器
4. lang 是语言包
5. data db 文件所在目录
6. www 所有前端静态资源文件

2、9月1号加深了不少认知

5月到8月实际上忙到非常,头发也快掉光。

8月底9月初那几天有了点空,又重新梳理了一下,定了一下基调。

基调:

1)小型;所以数据库继续使用 小型数据库如 sqlite;
2)路由;完全兼容 lbs 原来;含asp文件 及其它前端静态资源文件;
3)原来的代码结构尽量保持;
4)框架选型?实现一套兼容 asp 运行环境的库,达到最小化改动lbs 原有代码的目的;
5)模板引擎 ejs;js 原始语法

思考过程:

基于thinkjs,然后充分模拟原始运行环境
基于thinkjs是对的,其做了很多封装、整合的工作,避免了从头开始的过程;db层可以切换多种数据库引擎;

全局对象都应该以中间件形式存在,才能在相关代码中简单访问到 ctx 对象;
i18n 目前只能在控制器和视图中访问,如何处理?;

the 开头的一些全局对象
、lang、input、
Application、Sesson 函数

lang
func
connBlog
theCache
theUser
Session
Application

npmjs 中查找asp asp 兼容asp3语法、基于js-fpm、还没有完成,废的;node-fastcgi:与主流的nodejs 思路相背,坑会比较多,不考虑;
基于koa?

方法
先将标准降低一个档次;
以一种具体的框架的原有模式为主导,先实现一个lbs的版本;

然后再按最高标准:完全原封不动的在nodejs环境实现lbs的运行;而这种目标会因为涉及fastcgi、asp运营环境等属于服务器和框架级别的工作量,会导致无法达成目标;

9月13号

开始有空看看开源中国的新闻了,无意中看到eggjs的介绍,确定了基本这款框架来进行,主要的理由是,它这里面没有固定的Model概念,只有service,与lbs原来的代码结构能贴合一些。

Egg.js
『约定优于配置』

  • 深度框架定制
  • 高度可扩展的插件机制
  • 内置多进程管理
  • 基于 koa 开发,性能优异

11月16日

又是很忙的一个阶段,一下又到年底了,才开始将这个事放在手机的提醒app里每天提醒。

1、基于 egg.js 框架
2、代码保持原有的结构和写法;
3、2018 结束前完成;
4、确定开发任务清单

1)[x]框架确定-egg、[x]代码结构确定、[x]模版引擎确定-ejs、[x]数据库确定-mysql;
2)cookie、session
3)db 引擎 [x] 方法封装 []表名处理 [blog_] []top 条件处理
3)[x]i18n
4)view
5)cache []中涉及到原asp的 Application 数据存取、数组的 ubound 等专有属性方法;
6)user
7)lib
8)功能移植;login、register、user、default、article、comment、feed、trackback、stats、gbook;

从模版的迁移方式开始;

Helper 的实例还可以在模板中获取到

{{ helper.shtml(value) }}

'use strict';

module.exports = app => {
  app.beforeStart(async () => {

    app.locals = {
      strTitle: 'Page Title',
    };
  });
};
[]func => helper

业务代码中 ctx.helper
视图中则 helper.

[x]lang []i18n

[]theCache
[]theUser

11月22日

将about页面视图基本调试正常,主要是解决了cache service;

下一步沿着登陆页面,走通theUser user service;涉及到 theCache、Session、connBlog、input、func、ServerVariables、Cookies、验证码

connBlog 是全局对象,意味着没有 context

theCache、theUser 应该是 请求级对象,都依赖于 ctx;

将Cache 一分为二;大部分属于 App级别的,少部分可以转到 helper中去;

12月17日

[x]1、验证码图片加载;
2、登陆结果处理;
3、注册
4、找回密码;
5、管理员登陆;

this.ctx.__('scode_invalid’)

不能展开成 __ 函数进行使用;

const { theCache, connBlog, session, helper: func, cookies, logger } = this.ctx;

最佳实践,可能可以尽量保留原代码;

用中间件的形式实现全局对象的数据初始化执行,让需要提前初始化的代码被执行;而且支持 async/await,否则无论是 application.js app.js 还是 context.js 都不满足场景;

五、仓库地址

https://gitee.com/web3d/node-lbs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本版本为LBS2.02.83正式版 汉化修改而成修改者:LESSYQQ:7112000Http://Lessy.cn修改内容:1,汉化语言包lang/admin.asp lang/blog.asp!2,添加网摘功能(Key365,新浪VIVI,我摘,博采).登陆帐号:admin登陆密码:comeon2005.04.17更新记录:2.0.283- function.asp: 修正一个 bug- ubbcode.asp: 修正若干 bug, 整理输出内容符合 XHTML 标准- lang/blog.asp: 添加项目- source/src_default.asp: 整理输出内容符合 XHTML 标准- source/src_comment.asp: 整理输出内容符合 XHTML 标准- source/src_trackback.asp: 整理输出内容符合 XHTML 标准- article.asp, global.asp, default.asp, comment.asp, gbook.asp, trackback.asp: 整理输出内容符合 XHTML 标准2.0.282- scode.asp: 输出成 Opera 可识别的 BMP 格式更新记录:2.0.281- class/ functions.asp: 修正 wordFilter() 的一个 bug2.0.280- class/ubbcode.asp: Fixed a bug- source/src_gbook.asp: Fixed a bug- styles/oldschool/style.css: Fine-tuned- about.asp: Fixed a html problem2.0.b279- 整体大修改, 建议全部更新- upgrade20b278.asp: 数据库升级文件2.0.b278- class/article.asp: Added new features- class/functions.asp: Rewrite keyword highlight with RegExpAdded url suffix to generatePageLinks()- class/ubbcode.asp: Reverse back to use <div> for <blockquote> and <pre>Modified url recognization code- source/src_default.asp: Fixed a bug with ubbFlags- source/src_trackback.asp: Added list trackback by article ID- source/src_comment.asp: Added settting control- source/src_admin.asp: Added settings- source/src_article.asp: Added new features- lang/admin.asp: Added settings- article.asp: Added new features- admin.asp: Added settings- style.css: Large changes- messageform.js: Fixed a bug when switch UBB Button mode2.0.b277- class/function.asp: 修正 lengthW() 和 trimUBB() 的 bug- class/ubbcode.asp: 添加修改样式相关的代码- lang/admin.asp: 添加 "style_sheet", "image_folder" 和 "smilies folder"- source/src_admin.asp: 修正删除 smilies 和 wordfilter 项目时的 bug, 添加修改样式相关的代码- source/src_login.asp: 修正重定向的一个 bug- common.js: 修改搜索表单的检查方式- admin.asp, default.asp, global.asp, article.asp, comment.asp, gbook.asp,trackback.asp, user.asp: 添加修改样式相关的代码- _upgrade2.0.b276.asp: 2.0.b276 及之前版本的升级文件2.0.b276- class/user.asp: 添加关闭 IP 检查的设置- source/src_default.asp: 添加搜索和高亮关键字- source/src_comment.asp: 添加搜索和高亮关键字- source/src_trackback: 添加搜索和高亮关键字- lang/blog.asp: 添加 t["search"]- _common.asp: 添加关闭 IP 检查的设置- article.asp: 小改动- global.asp, default.asp, comment.asp, trackback.asp: 添加搜索和高亮关键字- common.js: 添加 doSearch()- styles.css: 小改动2.0.b275- class/user.asp: 在 Cookies 里面使用 User ID 而不是 username, 可能修正了 cookies 的保存问题- class/functions.asp: 修改 trimUBB() 函数- class/ubbcode.asp: 用 <blockquote> 和 <pre> 来转换 [quote] 和 [code] 标记, 修正 smilies 的处理 bug- source/src_login.asp: 修改了页头的输出位置- source/src_admin.asp: 修正跨类别移动文章没有更新 cache 的 bug- _common.asp: 小修改- default.asp, gbook.asp, comment.asp, trackback.asp, admin.asp, default.asp, login.asp,user.asp, global.asp, article.asp, scode.asp: 小改动- common.js: 小改动- styles.css: 较大改动2.0.b274- class/dbconn.asp: 补上遗漏的连接状态检查- class/ubbcode.asp: 为 smilies 添加 ALT 文本(用于 comment quote)- source/src_comment.asp: 修正评论列表文章 URL 丢失 id 的问题, 修正删除评论导致统计错误- source/src_admin.asp: 移动类别的文章后重新统计文章数- source/src_default.asp: 把 Permalink 的代码移动到这里- _common.asp: 移动 Permalink 的代码到 default 页面- default.asp: 修改了 Permalink 的参数- common.js: 按 XHTML 修改了 ubbShowObj() 函数输出的 HTML, 引用时通过转换 ALT 的内容保留 smilies 标记2.0.b273- source/src_stats.asp: 修正无数据显示时出错的问题- source/src_default.asp: 小改动- source/src_admin.asp: 把所有 "fos" 替换为 "fso"- lang/blog.asp: 添加 "permalink" 和 "file_write_fail" 项目- lang/admin.asp: 替换所有 "fos" 为 "fso", 修改了 "req_obj_fso" 项目, 删除了 "obj_dict" 和 "req_obj_dict"- class/upload.asp: 修改代码, 改为不需要 Dictionary 对象, 同时稍微优化了下资源占用- upload.asp: 修改代码- _common.asp: 添加 Permalink 转向- admin.asp: 替换所有 "fos" 为 "fso"- default.asp: 添加 Permalink 显示2.0.b272- upload.asp: 修正用 Gecko 引擎的浏览器对 javascript 的支持问题- register.asp, global.asp, user.asp, login.asp: 更新- s_img.asp: 删除- images/securtiy: 删除- scode.asp: 添加新的 Security Code 生成代码2.0.b271- source/login.asp: 修正注销后重定向的问题- source/trackback.asp: 修正 log_id 的处理错误- article.asp: 修正上个版本的一个 bug- global.asp: 修正最近评论列表的一个 bug
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值