app.js 入口 api Controller admin 用户的增删改查 admin.controller.js admin.js category.controller.js laboratory.controller.js post.controller.js tag.controller.js oauth github认证相关 github.controller.js index.js

  • app.js 入口
    • api Controller
      • admin 用户的增删改查
        • admin.controller.js
        • admin.js
        • category.controller.js
        • laboratory.controller.js
        • post.controller.js
        • tag.controller.js
      • oauth github认证相关
        • github.controller.js
        • index.js
      • post 发表文章相关
        • comment.controller.js
        • post.controller.js
        • post.js
      • track 所在位置
        • track.controller.js
        • track.js
    • config 配置参数
      • koa.js
      • environment
        • development.js
        • index.js
      • src 静态文件夹
        • tempUploads
        • uploads
          • 20190226
            • 1551191742895.png
          • 20190228
            • 1551361201136.png
            • 1551362238172.png
    • middlreware 中间件
      • tokenError.js
    • routes 路由管理
      • index.js
    • util 一些公共方法
      • admin-account.js
      • draft-redis.js
      • draft-socketio.js
      • helper.js
      • mysql-async.js
      • redis-mysql.js
      • redis-store.js

服务器入口文件

//app.js
const session = require('koa-session2');
const http = require('http');
const fs = require('fs');
const path = require('path');
// 对koa的二次封装,涉及路由拦截,jwt认证等
const app = require('./config/koa');
// 基本配置参数
const config = require('./config/environment');
// mysql
const query = require('./util/mysql-async');
//redis
const Store = require('./util/redis-store');
//socket
const draftSocket = require('./util/draft-socketio');\
//redis连接mysql
const redisMysql = require('./util/redis-mysql');
//redis初始化
app.use(session({
  store: new Store(config.db.redis),
  ttl: 2 * 60 * 60 * 1000
}));
// 是否允许跨域
app.use(async (ctx, next) => {
  ctx.execSql = query;
  ctx.set('Access-Control-Allow-Origin', config.accessControlAllowOrigin);
  await next();
});
// routes
fs.readdirSync(path.join(__dirname, 'routes')).forEach(function (file) {
  if (~file.indexOf('.js')) {
    app.use(require(path.join(__dirname, 'routes', file)).routes());
  }
});
//开启服务器
const server = http.createServer(app.callback())
  .listen(config.port)
  .on('listening', function () {
    console.log('server listening on: ' + config.port);
  });
// 初始化websocket
draftSocket.initSocket(server);
// 初始化定时任务
redisMysql.redisToMysqlTask();

总结

  • 这是服务器的文件结构和入口文件,其中还有一些细节没有展示,比如如何连接redis,如何连接数据库,路由捕获,jwt认证,socket的前后端联调等,这些一一会在后面介绍。

暂无评论