关于 ThinkJS

ThinkJS 是一款基于 Promise 的 Node.js MVC 框架,详情直接看官网 ThinkJS 官网。至于为什么选择 NodeJS,选择 ThinkJS,最大的原因可能就是前后端语法的一致性,回想起来之前即写 PHP,又写 JavaScript 的日子,脑子都记混了 split 和 explode。

为什么选择百度云

原因就是百度云是为数不多提供 NodeJS 服务的 PaaS 平台,支持 Git 对代码进行管理,不用安装额外的客户端,至于收费,每月10元的收费不算贵,至少收费 + Git提供了一个比较安心的环境保障;

2016 年 2 月 15 日更新:百度云已经添加了基于 Node V4.2 的新版本,新版本支持 ThinkJS 2 的版本,使用方式没有变化


2015 年 11 月 20 日更新:ThinkJS 2 的版本不支持 node v 0.10 的版本,而百度云的版本正好是 v0.10,所以暂时升级不了 ThinkJS 2 的版本,已经在 BAE 官方提交反馈;

百度云 ThinkJS 环境的局限性

和普通的 Linux 主机相比,百度云在 NodeJS 的环境上面有诸多限制。普通环境下,npm 安装 ThinkJS 的包后,ThinkJS 监听端口后启动,然后直接访问对应的主机端口即可,还有就是在前端使用 Nginx 等做反向代理,这些都没有大问题;使用百度云的问题,第一是无法手动安装 ThinkJS 的包,第二是百度云使用的是 lighttpd 做的反向代理,配置文件使用的是 YAML 语法规范。监听的端口这里也做的规定,不能任意指派,使用 18080;

环境部署

创建应用,添加BAE部署,选择「node.js4.2.6-web」类型。版本管理工具建议选择 Git(本文也是根据 Git 演示的),根据页面提示操作即可。

创建应用

创建成功后通过 Git 拉取代码到本地,可以看到三个文件

app.conf (lighttpd 配置文件)
package.json(npm 配置文件)
server.js (应用入口文件)

在应用目录下面现在就可以使用 thinkjs 初始化项目了,使用 thinkjs-cmd 会提示目录不为空,这样的话可以先将这三个文件移出去,初始化完成后可以将 app.conf, package.json 复制回来,service.js 就可以删除了;

然后编辑 package.json, 符合 npm 规范就可以,主要是有以下几个注意的:

{
    "name": "thinkjs-test",
    "version": "1.0.0",
    "author": "AlphaTr",
    "description": "test in node use thinkjs",
    "scripts": {
        "start": "node index.js"
    },
    "dependencies": {
        "thinkjs": "1.0.0"
    }
}

一个是 "start": "node index.js" 这一行,后面的 index.js 就是 ThinkJS 的入口文件,所以百度云初始化的入口文件就可以丢弃不用了;
再一个是声明的依赖 "thinkjs": "1.0.0",声明在这里后,百度云会根据这里的依赖会自动安装 ThinkJS 的 npm 包到 .bae/node_modules 目录下,所以就不需要手动安装,也不要做手动安装。

再者就是编辑 App/Conf/config.js 文件,更改 port 为 18080,其他的配置按照需求来定就可以了。

最后编辑 app.conf 文件,这里简单配置下 handles,我会将所有文件都转发给 ThinkJS 处理

handlers:
  - regex_url: ^/index.js$
    script: $1.nodejs

  - regex_url: ^/$
    script: $1.nodejs

这样就能实现 lighttpd 反向代理到 nodejs。

OK,现在将代码 commit,push 上去,在 Web 页面管理控制台点击快捷发布就行了。剩下的工作就是自己码业务代码了;

参考文档