1 |
|
2 | if (process.env['NODE_ENV']) {
|
3 | global['__env__'] = process.env['NODE_ENV']
|
4 | } else {
|
5 | if (process.argv.length >= 3 && process.argv[2] == 'https') {
|
6 |
|
7 | global['__env__'] = 'pre'
|
8 | } else if (process.argv.length >= 3 && process.argv[2] == 'http') {
|
9 |
|
10 | global['__env__'] = 'daily'
|
11 | }
|
12 | else {
|
13 |
|
14 | global['__env__'] = 'local'
|
15 | }
|
16 | }
|
17 | if (global['__env__'] != 'local') {
|
18 | require('source-map-support').install()
|
19 | }
|
20 | require('tsconfig-paths').register()
|
21 | const express = require('express')
|
22 | const app = express()
|
23 | const _ = require('lodash')
|
24 | const path = require('path')
|
25 | const http = require('http')
|
26 | const https = require('https')
|
27 | const fs = require('fs')
|
28 | import {get_root_path_prefix, request_process, parse_post_param} from './init'
|
29 |
|
30 |
|
31 | let PORT: any = parseInt(process.argv[2])
|
32 | if (!PORT) {
|
33 | PORT = 8888
|
34 | }
|
35 |
|
36 |
|
37 | app.use(express.static(path.join(get_root_path_prefix(), './static')))
|
38 |
|
39 |
|
40 | const bodyParser = require('body-parser')
|
41 | app.use(function (req, res, next) {
|
42 | var rawBody = []
|
43 | var size = 0
|
44 | req.on('data', function (data) {
|
45 | rawBody.push(data)
|
46 | size += data.length
|
47 | })
|
48 | req.on('end', function () {
|
49 |
|
50 | req.rawBody = Buffer.concat(rawBody, size).toString()
|
51 | })
|
52 | next()
|
53 | })
|
54 |
|
55 | app.use(bodyParser.json())
|
56 | app.use(bodyParser.urlencoded({extended: false}))
|
57 |
|
58 | app.use(function (req, res, next) {
|
59 | if (req.headers.origin) {
|
60 |
|
61 | res.header("Access-Control-Allow-Origin", req.headers.origin);
|
62 | }
|
63 |
|
64 | res.header("Access-Control-Allow-Credentials", "true")
|
65 | res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
|
66 | res.header('Access-Control-Allow-Methods', 'POST, OPTIONS')
|
67 | next()
|
68 | })
|
69 |
|
70 |
|
71 | const routes = require(path.join(get_root_path_prefix(), './app/entries/route.map')).default
|
72 | for (let k in routes) {
|
73 | app.all(k, async function (req, res) {
|
74 | req.headers.__api__ = routes[k].path
|
75 | callback(req, res)
|
76 | })
|
77 | }
|
78 |
|
79 |
|
80 |
|
81 |
|
82 |
|
83 | app.all(/^((?!\.).)*$/, callback)
|
84 |
|
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 | if (process.argv[2] == 'https') {
|
91 |
|
92 | const privateKey = fs.readFileSync(
|
93 | path.join(get_root_path_prefix(), './secrete/private.pem'), 'utf8')
|
94 | const certificate = fs.readFileSync(
|
95 | path.join(get_root_path_prefix(), './secrete/public.crt'), 'utf8')
|
96 | const credentials = {key: privateKey, cert: certificate}
|
97 | const httpsServer = https.createServer(credentials, app)
|
98 | httpsServer.listen(443, function () {
|
99 |
|
100 | process.send('fc pre-release-test app listening on port 443!')
|
101 | })
|
102 | } else if (process.argv[2] == 'http') {
|
103 |
|
104 | const httpServer = http.createServer(app)
|
105 | httpServer.listen(80, function () {
|
106 |
|
107 | process.send('fc test app listening on port 80!')
|
108 | })
|
109 | } else {
|
110 |
|
111 | const httpServer = http.createServer(app)
|
112 | httpServer.listen(PORT, function () {
|
113 | process.send(`fc test app listening on port ${PORT}, visit http://127.0.0.1:${PORT}`)
|
114 |
|
115 | })
|
116 | }
|
117 |
|
118 | async function callback(req, res) {
|
119 | try {
|
120 | await __callback__(req, res)
|
121 | } catch (err) {
|
122 |
|
123 | }
|
124 |
|
125 | process.exit()
|
126 | }
|
127 |
|
128 | async function __callback__(req, res) {
|
129 | let param = req.query || {}
|
130 |
|
131 | let __api__ = req.headers.__api__ ? req.headers.__api__ : req.path
|
132 | let __url__ = req.protocol + '://' + req.get('host') + req.originalUrl
|
133 |
|
134 | try {
|
135 |
|
136 | switch (req.method) {
|
137 | case 'GET':
|
138 | break
|
139 | case 'POST':
|
140 | param = xassign(param, parse_post_param(req.headers, req.rawBody))
|
141 | break
|
142 | case 'OPTIONS':
|
143 |
|
144 | res.sendStatus(200)
|
145 | return
|
146 | default:
|
147 |
|
148 | res.sendStatus(400)
|
149 | return
|
150 | }
|
151 |
|
152 | let __header__ = req.headers
|
153 | param = xassign(param, {__api__, __url__, __header__})
|
154 |
|
155 |
|
156 | global['__request_cookies__'] = require('cookie').parse(_.get(req.headers, 'cookie', ''))
|
157 |
|
158 |
|
159 | global['__user_agent__'] = req['headers'] ? (req['headers']['user-agent'] ? req['headers']['user-agent'] : '') : ''
|
160 |
|
161 |
|
162 | global['__client_ip__'] = req.headers['x-forwarded-for'] || req.connection.remoteAddress
|
163 |
|
164 |
|
165 | let out = await request_process(__api__, param)
|
166 |
|
167 |
|
168 | if (!_.isEmpty(global['__respond_cookies__'])) {
|
169 | res.setHeader('Set-Cookie', _.values(global['__respond_cookies__']))
|
170 | }
|
171 |
|
172 | if (global['__redirect_url__']) {
|
173 | res.redirect(302, global['__redirect_url__'])
|
174 | global['__redirect_url__'] = undefined
|
175 | return
|
176 | }
|
177 | res.send(out)
|
178 | } catch (err) {
|
179 |
|
180 | await xwarn({
|
181 | __api__, __url__, param, message: err.message, stack: xstack(err)
|
182 | })
|
183 |
|
184 | res.sendStatus(500)
|
185 | }
|
186 | } |
\ | No newline at end of file |