index.ts 1.6 KB
Newer Older
P
Peter Pan 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/**
 * Copyright 2020 Baidu Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

17
/* eslint-disable no-console */
18

19 20
import express from 'express';
import middleware from './middleware';
21

22 23 24
const host = process.env.HOST || 'localhost';
const port = Number.parseInt(process.env.PORT || '', 10) || 8998;
const apiUrl = process.env.API_URL || '/api';
25

26 27 28 29 30
export interface Options {
    host?: string;
    port?: number;
    apiUrl?: string;
}
31

32
const server = express();
33

34 35
async function start(options?: Options) {
    const config = Object.assign({host, port, apiUrl}, options);
36

37
    server.use(config.apiUrl, middleware());
38

39 40 41 42 43 44 45 46 47 48 49 50 51
    const s = server.listen(config.port, config.host, () => {
        process.send?.('ready');
        console.log(`> Ready on http://${config.host}:${config.port}${config.apiUrl}`);
        process.on('SIGINT', () => {
            s.close((err: Error | undefined) => {
                if (err) {
                    throw err;
                }
                process.exit(0);
            });
        });
    });
}
P
Peter Pan 已提交
52

53 54 55
if (require.main === module) {
    start();
}
56

57
export {start, middleware};