-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.ts
79 lines (69 loc) · 1.92 KB
/
server.ts
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
/*
* @Description: Copyright (c) ydfk. All rights reserved
* @Author: ydfk
* @Date: 2023-08-21 17:53:22
* @LastEditors: ydfk
* @LastEditTime: 2023-10-20 21:19:06
*/
import fastify from "fastify";
import config from "./plugins/config";
import { router } from "./routes";
import { IS_DEV } from "./constant";
import { existsSync, mkdirSync } from "fs";
import cors from "@fastify/cors";
import helmet from "@fastify/helmet";
import rfs from "rotating-file-stream";
const getLogger = () => {
const logger: any = {
level: "info",
formatters: {
level: (label: any) => {
return { level: label.toUpperCase() };
},
bindings: (bindings: any) => {
return { pid: bindings.pid, host: bindings.hostname };
},
},
timestamp: () => `,"timestamp":"${new Date(Date.now()).toISOString()}"`,
};
if (!IS_DEV) {
const logPath = process.env.LOG_PATH || "./log";
if (!existsSync(logPath)) {
mkdirSync(logPath);
}
logger.stream = rfs.createStream(`${logPath}/app.log`, {
size: "10M", // rotate every 10 MegaBytes written
interval: "1d", // rotate daily
compress: "gzip", // compress rotated files
});
}
return logger;
};
const app = fastify({
ajv: {
customOptions: {
removeAdditional: "all",
coerceTypes: true,
useDefaults: true,
},
},
logger: getLogger(),
});
app.addHook("preSerialization", async (request, reply, payload) => {
if (payload && Object.hasOwnProperty.call(payload, "code")) return payload;
return { code: "10000", flag: true, data: payload };
});
app.setErrorHandler(function (error, request, reply) {
app.log.error(error);
reply.status(200).send({ code: "500", flag: false, msg: error.message });
});
await app.register(cors, {
origin: "*",
allowedHeaders: "*",
methods: "*",
});
await app.register(config);
await app.register(helmet);
await app.register(router);
await app.ready();
export default app;