-
Notifications
You must be signed in to change notification settings - Fork 12
/
app.js
85 lines (68 loc) · 2.44 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
let http = require("http")
let Koa = require("koa");
let Router = require("koa-router");
let EventEmitter = require('events').EventEmitter;
let router = new Router();
let app = new Koa();
// session key,签名用
app.keys = ["I am a session key! My random number is 6291619!"];
// 引入路由列表
let routes = require("./router/routes");
// 事件监听注册列表
global.EventEmitter = new EventEmitter();
require("./utils/event");
// 定时任务处理列表
require("./utils/crontab");
// 静态资源路径,开发接口并不需要 static,但是可能会上传文件
let static = require('koa-static');
app.use(static(__dirname + '/public'));
// 如果需要服务端渲染页面模板
let views = require("koa-views");
app.use(views(__dirname + "/views", { extension: "ejs" }));
// 引入自定义的错误处理中间件,处理 404、500
let error = require("./utils/midware/error");
app.use(error);
// 挂载在 context 上的快捷方法:log,可以将日志写入数据库
let daoLog = require("./dao/log");
global.log = function (key = "untitled log", value = "") {
daoLog.add({
key,
value
});
};
// 使用 Redis 存储 session,到期 Redis 自动删除,这里需要简化一下,移到config里面去
let session = require("koa-generic-session");
app.use(session(require("./config/session")));
// 引入自定义的用户认证中间件,处理需要鉴权的用户列表
let needLoginUrl = require("./utils/midware/needLoginUrl");
app.use(needLoginUrl);
// 文件上传的支持
let body = require("koa-body");
app.use(body({ multipart: true }));
// xml 解析的支持,并且挂载到cxt上,处理微信公众号等需要用到
let xmlParser = require("koa-xml-body");
app.use(xmlParser());
app.use(function (ctx, next) {
ctx.xml = ctx.request.body;
return next();
});
// 跨域控制的支持
let cors = require("koa2-cors");
app.use(
cors({
origin: function (ctx) {
return "*"; // 允许来自所有域名请求,上线后请注意配置
},
credentials: true,
allowMethods: ["GET", "POST"]
})
);
// 把 router 做为参数传递给 routes 使用,以便函数内部 use
routes(router);
// 路由注册到 app
app.use(router.routes()).use(router.allowedMethods());
// 设置 proxy 为 true,那么就可以在请求里拿到实际 IP
app.proxy = true;
let port = process.env.PORT || 3000;
http.createServer(app.callback()).listen(port);
console.log(`FastServer 运行在 ${port}端口!!!`);