教程目录:1、安装及helloworldhttp://www.jianshu.com/p/bd389d2622ac2、服务端结构和集成jsonwebtokenhttp://www.jianshu.com/p/070ca43163123、Token验证和全局身份信息http://www.jianshu.com/p/5f9ea0ab47044、配置系统和多语言http://www.jianshu.com/p/1622c8f13b685、最神奇的logic层http://www.jianshu.com/p/7580825b74946、orm&mysql版本联合查询http://www.jianshu.com/p/d458ff831b61
教程源码地址:http://git.oschina.net/zhangshibin/HelloThinkjs
教程一是纯粹入门级的,从这一章开始就进入比较实战了,不会是单纯的crud的。前后端完全分离,已经是比较主流的架构模式了,后端单纯的做webapi or restful服务,可以提供给前端任何设备应用调用。一般流行的模式是web网站+后台管理+服务提供者+前端mobile,教程二的重点是webapi和前端app之间的交互。thinkjs支持REST API,我计划采用传统的Controller根据请求返还数据的方式,之所以没有采用restful方式,我认为restful的几个crud资源用于系统外部访问比较优秀,但是在体系内访问还是用比较有意义的Controller+action方式比较更好理解。当然我这个看法应该是不妥的。
webapi和前端通讯最关键的是安全机制,我们采用比较主流的jsonwebtoken,jwt方式,只要我们知道语言jwt应该都支持。http://jwt.io/
注:前端mobile采用的是h5模式,后续把前端的教程也一并写一下。
1、添加模块我们先看thinkjs的src目录结构,如何添加模块,windows环境下先进入cmd,最好是管理员名义进入cmd。
D:25PMObservingPMObservingWeb>thinkjs module admin create : srcadminconfig create : srcadminconfigconfig.js create : srcadmincontroller create : srcadmincontrollerbase.js create : srcadmincontrollerindex.js create : srcadminlogic create : srcadminlogicindex.js create : srcadminmodel create : srcadminmodelindex.js create : viewadmin create : viewadminindex_index.htmlD:25PMObservingPMObservingWeb>thinkjs module webapi create : srcwebapiconfig create : srcwebapiconfigconfig.js create : srcwebapicontroller create : srcwebapicontrollerbase.js create : srcwebapicontrollerindex.js create : srcwebapilogic create : srcwebapilogicindex.js create : srcwebapimodel create : srcwebapimodelindex.js create : viewwebapi create : viewwebapiindex_index.html
admin、webapi模块添加成功,会添加模块下边的config 、默认的Controller,默认的model和view。home用于web网站,admin用于后台管理的模块,webapi用于后端提供服务。由于前后端完全分离,我们可以把view相关的删除。文件上的符号是git的标记,推荐大家采用git。github或者oscchina的git服务一流。
2、加入token服务先安装jwt
D:25PMObservingPMObservingWeb>npm install jsonwebtoken --savethinkjs-application@1.0.0 D:25PMObservingPMObservingWeb`-- jsonwebtoken@5.7.0 `-- jws@3.1.3 +-- base64url@1.0.6 | +-- concat-stream@1.4.10 | | `-- typedarray@0.0.6 | `-- meow@2.0.0 | +-- camelcase-keys@1.0.0 | | `-- camelcase@1.2.1 | +-- indent-string@1.2.2 | `-- object-assign@1.0.0 `-- jwa@1.1.3 +-- buffer-equal-constant-time@1.0.1 `-- ecdsa-sig-formatter@1.0.5 `-- base64-url@1.2.1
然后用thinkjs命令创建service.
D:25PMObservingPMObservingWeb>thinkjs service token create : srccommonservice create : srccommonservicetoken.js
小项目统一建在common下边即可,大的项目可以分开到不同的模块中。分模块建立service是thinkjs service 模块民/服务类名。
3、token服务内容计划两大功能:生成token和验证token。
"use strict";//引入jwtlet jwt = require;//读取secret标记码let secret = think.config;//读取token有效期let expiresIn = think.config;export default class extends think.service.base { /** * @description 创建token * @param {Object} userinfo 用户信息 * @return 返回token */ createToken { let result = jwt.sign; return result; } /** * @description 验证票据 * @param {Object} token 用户请求token * @return 返回 错误或者解密过的token */ verifyToken { if { try { let result = jwt.verify; return result; } catch { //票据验证失败,需要提示需要重新登录 return "fail"; } } return "fail"; }}
think.config用法,这个单独教程来写。token写入和校验,都可以加上配置项,比如票据期限,判断是否过期。本文采用核发票据验证即可。token中包含用户的姓名、部门等等用户基本信息或者程序所需要的信息,原则是前端每次登录获取token,每次请求后端都在header中带上token,服务端验证token的合法性。具体内容看下一章。