# 快速入门

# 前言

thinkjs (opens new window) 是一款面向未来开发的 Node.js 框架,整合了大量的项目最佳实践,让企业级开发变得更简单、高效。从 3.0 开始,框架底层基于 Koa 2.x 实现,兼容 Koa 的所有功能。

本文将着重介绍原生文档之外的东西,以便你更好的进行项目开发,你可以先查看项目结构 了解项目的基本结构。

# 基础配置

一、config配置信息

const workers =1;
module.exports = {
  workers:workers, //服务器workers
  port:(6000+workers),  //端口号
  errnoField: 'code',  //状态标识
  errmsgField: 'message',  //提示标识
  defaultErrno: 401, //默认错误号
  validateDefaultErrno: 406, //验证默认错误号
  stickyCluster: true,
  // 微信配置
  wechat: {
      appid: '***********',
      secret: '***********',
      url: "https://api.weixin.qq.com/sns/jscode2session",
      tokenUrl: "https://api.weixin.qq.com/cgi-bin/token",
      phoneUrl: "https://api.weixin.qq.com/wxa/business/getuserphonenumber",
      qrUrl: "https://api.weixin.qq.com/wxa/getwxacodeunlimit"
  },
  // token配置
  jwt:{
  		  secret:'***********', //token加密标识
  		  expiresIn:3600*24*30, //有效期
  },
  // 数据库配置
  database:{
   id: 0,
   host: '127.0.0.1', //地址
   port: '5432',  //端口号
   user: 'postgres', //账号
   password: '***********', //密码
   database: '***', //数据库名称
   prefix: 'zee_', //前缀
  },
  // 第三方对接
  bridge: {
      aliyun: {  //密钥
          accessKeyId: '***********',
          accessKeySecret: '***********',
      },
      aliyun_oss: { //阿里云对象存储
          endpoint: 'https://file.hblg.vip/', //图片地址
          bucket: 'hblg-file', //桶
          folder: 'biz_school/',
      },
     
  },
};

二、使用配置

  • 在 ctx 中,可以通过 ctx.config(key) 来获取配置
  • 在 controller 中,可以通过 controller.config(key) 来获取配置
  • 其他情况下,可以通过 think.config(key)或直接引用文件来获取配置
const redis = think.config('bridge');

三、动态设置配置

 think.config('bridge', {name:'1111'})

# 创建接口

我们通过路由将用户的请求分发到了对应的 Controller 上,Controller 负责解析用户的输入,处理后返回相应的结果 。 所有的 Controller 文件都必须放在 src/controller 目录下,可以支持多级目录,访问的时候可以通过目录名级联访问。

module.exports = class extends  think.Controller {
 async indexAction() {
return this.success('你好世界');
  }
};

# 路由配置

Router 主要用来描述请求 URL 和具体承担执行动作的 Controller 的对应关系, 框架约定了 src/config/router.js 文件用于统一所有路由规则。

module.exports = [
     ['/usersettings', '/user/setting']
	['/common/socket/:action','/common/socket/:action','get,websocket'],
    ['/:module/:controller/:action', '/:module/:controller/teacher/:action', 'get'],
['/:module/:controller/:action', '/:module/:controller/:action', 'post'],
['/:module/:controller/:subItem/:post', '/:module/:controller/:subItem/:post', 'post'],
];
/**
 * 可传入值
  * @param {String | RegExp} 用户传过来的地址,匹配规则,可以是字符串或者正则
  * @param {String} 匹配后映射后的地址,后续会根据这个映射出对应的 controller、action
  * @param {String} 请求类型默认为所有。多个请求类型中间用逗号隔开,如:get,post
  * @param {Boolean} 额外的选项,如:跳转时指定 statusCode
 */

路由详细文档 (opens new window)

# 数据库操作

一、创建模型

module.exports = class extends think.Model {
 async getselect() {
    return this.select()
  }
};

二、使用模型

注:默认模型名字为数据库表名,tableName或者table重新设置表名

module.exports = class extends  think.Controller {
 async indexAction() {
    const data = await this.model('user').getselect();
    return this.success(data);
  }
};

数据库详细文档 (opens new window)