Skip to content

Instantly share code, notes, and snippets.

@larkintuckerllc
Created March 8, 2022 18:21

Revisions

  1. larkintuckerllc created this gist Mar 8, 2022.
    59 changes: 59 additions & 0 deletions standaloneServer.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,59 @@
    /*
    * Copyright 2020 The Backstage Authors
    *
    * 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.
    */

    import { ConfigReader } from '@backstage/config';
    import { createServiceBuilder } from '@backstage/backend-common';
    import { Server } from 'http';
    import { Logger } from 'winston';
    import { createRouter } from './router';

    const backendConfig = {
    backend: {
    baseUrl: 'http://localhost:7007',
    },
    };
    const config = new ConfigReader(backendConfig);

    export interface ServerOptions {
    port: number;
    enableCors: boolean;
    logger: Logger;
    }

    export async function startStandaloneServer(
    options: ServerOptions,
    ): Promise<Server> {
    const logger = options.logger.child({ service: 'my-plugin-backend' });
    logger.debug('Starting application server...');
    const router = await createRouter({
    config,
    logger,
    });

    let service = createServiceBuilder(module)
    .setPort(options.port)
    .addRouter('/my-plugin', router);
    if (options.enableCors) {
    service = service.enableCors({ origin: 'http://localhost:3000' });
    }

    return await service.start().catch(err => {
    logger.error(err);
    process.exit(1);
    });
    }

    module.hot?.accept();