20165 月24
本文基于Sails.js MVC框架
一、安装
npm i apidoc -save
npm i grunt-apidoc -save
二、配置
package.json
增加配置项
"apidoc": {
"title": "Sunshop"
},
tasks/config/apidoc.js
/**
* Created by wizzer on 2016/5/24.
*/
module.exports = function (grunt) {
grunt.config.set('apidoc', {
myapp: {
src: "api/controllers/api",
dest: "apidoc/",
options: {
includeFilters: [ ".*\\.json$" ]
}
}
});
grunt.loadNpmTasks('grunt-apidoc');
};
tasks/register/compileAssets.js
module.exports = function (grunt) {
grunt.registerTask('compileAssets', [
'clean:dev',
'jst:dev',
'less:dev',
'copy:dev',
'coffee:dev',
'apidoc:myapp' // <-- apidoc
]);
};
api/controllers/api/oauth.json 一个API文档示例,详细参数见apidoc官网。
/**
* @api {POST} /api/oauth/token Token
* @apiName Token
* @apiGroup Oauth
* @apiVersion 1.0.0
* @apiDescription 获取Token
* @apiPermission anyone
*
* @apiParam {string} client_id client_id
* @apiParam {string} client_secret client_secret
*
* @apiParamExample {json} 示例
* POST /api/oauth/token
* {
* "client_id": "client_id",
* "client_secret": "client_secret"
* }
*
* @apiSuccess (成功) {number} code 0
* @apiSuccess (成功) {string} msg success
* @apiSuccess (成功) {Object} data Token对象
* @apiSuccess (成功) {string} data.token Token
* @apiSuccess (成功) {number} data.expires 失效时间(24小时)请保存若失效重新获取
* @apiSuccess (成功) {number} data.appid AppId
* @apiSuccessExample {json} 示例
* HTTP/1.1 200 OK
* {
* "code": 0,
* "msg": "success",
* "data": {
* "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOjIsImV4cCI6MTQ2NDE1NjA2OTg3Nn0.4i_o7gCjCKvOImSi4peCMgCUrzpdgbtmvMECKf5wkqE",
* "expires": 1464156069876,
* "appid": 2
* }
* }
*
* @apiError (失败) {number} code 1:client_id不存在 2:client_id禁用 3:client_secret错误 4:参数错误
* @apiError (失败) {string} msg 错误文字描述
* @apiErrorExample {json} 示例
* HTTP/1.1 200 OK
* {
* "code": 1
* "msg": "client_id has error"
* }
*/
框架配置静态目录,让其可访问:
config/http.js
customMiddleware: function (app) {
app.use('/apidoc', require('express')['static'](require('path').normalize(__dirname + '/../apidoc')));
},
20165 月18
基于Sails.js MVC框架,路由自动映射,完善的权限控制体系,优美的后台界面。
集成最基础的通用功能:
系统(机构管理、用户管理、角色管理、菜单管理、定时任务、数据库备份、IP访问控制、登录日志等)
CMS(站点管理、栏目管理、内容管理、广告及链接等)
微信(会员列表、微信消息、群发消息、自动回复、关键词回复、帐号配置、菜单配置等)
演示地址:http://www.nodeshop.cn
联系方式:QQ 1162-4317 (备注nodejs)
界面截图:
20165 月4
1、申请AppId、AppKey和验证字符串
http://connect.qq.com/manage/login
网站首页头文件添加验证字符串,如:
<meta property=”qc:admins” content=”765754250763563070636” />
填写回调地址:
必须是公网地址,可以填写多个,注意 /xxx 和 http://wizzer.cn/xxx 是两个地址,两个都需要配置。
2、开发完成
登录页面:
<span id=”qqLoginBtn”></span>
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="<%=qq_appid||''%>" data-redirecturi="<%=req.baseUrl%>/public/shop/pc/account/oauthQq" charset="utf-8" ></script>
<script type="text/javascript">
QC.Login({
btnId:"qqLoginBtn", //插入按钮的节点id
scope: "get_user_info"
},function(oInfo, oOpts){
//登陆成功执行
var nickname=QC.String.escHTML(oInfo.nickname);//获取QQ会员名
var info={
nickname:nickname,
gender:oInfo.gender,
headimgurl:oInfo.figureurl_qq_1 //头像40X40
};//封装对象
if(QC.Login.check()){
QC.Login.getMe(function(openId, accessToken){
info.openid=openId;//传递openid及昵称头像等,业务逻辑自动注册会员或登录
$.post(
"/public/shop/pc/account/oauthQqStatus",
info,
function(result){
console.log(result);
if(result.code==0){
window.location.href=$("#r").val()||'/member';//登录成功跳转
}else{
alert('登录失败');
}
},'json'
);
});
}
});</script>
回调页面:
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" charset="utf-8" data-callback="true"></script>
退出登录:
<%if(sails.config.system.ShopConfig.oauth_open&&sails.config.system.ShopConfig.pay_wxpay&&sails.config.system.ShopConfig.oauth_qq){
var qq_appid='';
if(sails.config.system.ShopConfig.oauth_qq_info){
qq_appid=sails.config.system.ShopConfig.oauth_qq_info.qq_appid;
}
%>
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="<%=qq_appid||''%>" data-redirecturi="http://<%=sails.config.system.AppDomain%>/public/shop/pc/account/oauthQq" charset="utf-8" ></script>
<script type="text/javascript">
QC.Login.signOut();
if(QC.Login.check()==false){
window.location.href='/public/shop/pc/account/logout';//先QQ登出,再清除session
}else{
window.location.reload();
}
</script>
<%}else{%>
<script type="text/javascript">
window.location.href='/public/shop/pc/account/logout';
</script>
<%}%>
3、申请审核
审核条件:登录页面有QQ登录图标、使用申请的QQ或测试QQ号,测试可以正常登录后提交申请,否则肯定是不通过的。