w3ctech

ThinkJS 2.0 - 使用 ES6/7 全部特性开发 Node 项目

ThinkJS 是一款使用 ES6/7 特性全新开发的 Node.js MVC 框架,使用 ES7 中async/await,或者 ES6 中的 Generator Function 特性彻底解决了 Node.js 中异步嵌套的问题。同时吸收了国内外众多框架的设计理念和思想,让开发 Node.js 项目更加简单、高效。

使用 ES6/7 特性来开发项目可以大大提高开发效率,是趋势所在。并且新版的 Node.js 对 ES6 特性也有了较好的支持,即使有些特性还没有支持,也可以借助 Babel 编译来支持。

//控制器代码示例, home/controller/user.js
export default class extends think.controller.base {
  //login action
  async loginAction(self){
    //如果是get请求,直接显示登录页面
    if(this.isGet()){
      return this.display();
    }
    //这里可以通过post方法获取所有的数据,数据已经在logic里做了校验
    let data = this.post();
    let md5 = think.md5('think_' + data.pwd);
    //用户名和加密后的密码去匹配数据库中对于的条目
    let result = await this.model('user').where({name: data.name, pwd: md5}).find();
    //如果未匹配到任何数据,表示用户名或者密码错误
    if(think.isEmpty(result)){
      return this.fail('login fail');
    }
    //获取到用户信息后,将用户信息写入session
    await this.session('userInfo', result);
    return this.success();
  }
}

项目中可以大胆使用 ES6/7 里的所有特性,借助 Babel 编译,可以稳定运行在 >=0.12.0 的 Node.js 环境中。

特性

  • 使用 ES6/7 全部特性来开发项目
  • 支持多种项目结构和多种项目环境
  • 支持 Mysql,MongoDB,SQLite 等多种数据库
  • 代码自动更新,无需重启 Node 服务
  • 支持 socket.io,SockJS 等多种 WebSocket 库
  • 支持 Memory,File,Db,Redis 等多种 Session
  • 支持 Memory,File,Redis,Memcache 等多种 Cache
  • 支持 ejs,jade,swig,numjucks 等多种模版引擎
  • 支持切面编程,支持 before,after 等多种魔术方法
  • 支持自定义 400,404,500,503 等多种错误页面
  • 支持命令行调用和执行定时任务
  • 丰富的 Hook 和 Middleware
  • 详细的日志,如:请求日志、错误日志、性能日志
  • 支持命令自动创建 REST API
  • 支持国际化和多主题
  • 丰富的测试用例,1500+ 测试用里,代码覆盖率 > 95%

安装

npm install -g thinkjs

创建项目

thinkjs new project_path --es6

http://www.thinkjs.org/doc/create_project.html

Watch Compile

cd project_path;
npm run watch-compile

启动项目

cd project_path;
npm start

文档

w3ctech微信

扫码关注w3ctech微信公众号

共收到28条回复

  • 运行 thinkjs new project_path --es6 时报错,提示找不到文件 no such file or directory, open 'C:\Users\MS-WIN10\AppData\Roaming\npm\node_modules\thinkjs\template\nginx.conf'

    回复此楼
  • @zh33gl 刚发布的版本有点小问题,已经更新了。需要更新下 ThinkJS

    回复此楼
  • Node.js v5.0.0 稳定版今天发布,ThinkJS 2.0 也是今天发布,今天是个大喜的日子啊。

    回复此楼
  • 支持一下!

    回复此楼
  • 自己太渣了,一上午没搞明白,没以前版本的好上手。

    回复此楼
  • @老六 请问用sqlite数据库的话,是每个表都建一个数据库吗? 文件方式需要设置存储 SQLite 数据的目录,默认为 src/common/runtime/sqlite。

    export default { type: "sqlite", path: "/path/to/store/sqlite" //设置存储数据文件的目录 } 对应的数据表文件路径为 path + /[name].sqlite,默认情况下 think_user 表对应的文件路径为 src/common/runtime/sqlite/think_user.sqlite。

    回复此楼
  • @zh33gl 文档有问题,已经修改了。

    回复此楼
  • 麻烦老大了。明明有这个表的。死活报错 Connect sqlite with sqlite://E:\Project\nms/app/data/nms.sqlite [2015-10-30 16:31:55] [SQL] PRAGMA table_info( devices ) 2ms [2015-10-30 16:31:55] [SQL] SELECT * FROM devices WHERE ( name = 'thinkjs' ) 1ms [2015-10-30 16:31:55] [Error] Error: SQLITE_ERROR: no such table: devices

    回复此楼
  • 已找到错误,路径问题。整一天这个了。

    回复此楼
  • 请问,rest里如何将资源的id配置为非数字型的(比如guid)?

    回复此楼
  • @zh33gl 你用的是 MongoDB ?

    回复此楼
  • @老六 用的sqlite,要把thinkjs放到ARM上用

    回复此楼
  • @zh33gl 可以直接非数字型的。有问题的话,可以到 Github 上提 issue

    回复此楼
  • 回复此楼
  • 支持!!赞!!

    回复此楼
  • 牛逼

    回复此楼
  • @卢林 赶紧使用,然后写博客

    回复此楼
  • 是否有适配typescript的thinkjs.d.ts文件?

    回复此楼
  • 请问支持 Microsoft SQL Server 数据库吗?

    回复此楼
  • 试用了下 为什么在controller 定义变量后 在view页面已经引用 但是并不会实时更新?

    回复此楼
  • @jiel 你具体是怎么使用的呢? 加 QQ 群吧: 339337680

    回复此楼
  • @老六 真是不喜欢ThinkPHP式的模块/控件器/方法路由,太长了

    回复此楼
  • @老六 如果是Laravel式的路由就好了

    回复此楼
  • @weiheli 可以自定义路由呢

    回复此楼
  • @weiheli Laravel 的路由其实就是 ThinkJS 里的自定义路由

    回复此楼
  • @老六 就是view页面(html)有改动不会自动更新,难道是我自己哪里设置的有问题

    回复此楼
  • 能不能写个2.0版本的demo看看 新人小白 表示完全不懂啊

    回复此楼
  • thinkjs new project_path --es6 创建目录后 npm install --registry=https://registry.npm.taobao.org --verbose 且安装了依赖

    npm start 启动时 报错:

    [2016-01-13 15:48:30] [BABEL] compile file common\config\env\production.js error [2016-01-13 15:48:30] [Error] Error: EISDIR: illegal operation on a directory, at Error (native) at Object.fs.readSync (fs.js:603:19)

    BABEL 编译失败是什么回事呢?

    回复此楼