Как обслуживать контент stati c в Loopback 4.0? - PullRequest
0 голосов
/ 17 апреля 2020

Я нашел этот Q & A в обратной связи, но он не работает для 4.0: strongl oop loopback, как мне обслуживать stati c с маршрутом?

Я хочу подать немного базового c stati c контента. Или, может быть, даже произвольный контент.

Вот как обычно работают с express приложениями:

export class SomeLoopbackApp extends RestApplication {

  constructor() {
    const app = this;
    app.static('/', path.join(__dirname, '../../public'));
    app.get('/hello', (req, res) => {
      res.send('Hello world!')
    });
  }
}

По причинам, ни один из них не работает в Loopback 4. Я попытался найти способ получить доступ к реальному экземпляру express, скрытому где-то в Loopback (я почти уверен, что он использует его), но я не могу его найти.

Как сделать, чтобы loopback обслуживал stati c содержание

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Для обслуживания stati c файлов можно использовать this.static():

import path from 'path';

export class TodoListApplication extends BootMixin(
  ServiceMixin(RepositoryMixin(RestApplication)),
) {
  constructor(options: ApplicationConfig = {}) {
    super(options);

    // ...

    this.static('/', path.join(__dirname, '../../public'));
  }
}

Хотя LoopBack 4 действительно использует Express. js для повторного использования некоторых своих функций, он не раскрывает весь API в нормальных условиях.

Существуют некоторые привязки в RestBindings.Http, которые можно использовать для внедрения Express. js RequestContext, Request или Response объекты в контроллер. Однако это следует рассматривать как последнее средство.

Если необходим доступ к этим привязкам, настоятельно рекомендуется внедрить их в контроллер, чтобы воспользоваться преимуществами управления жизненным циклом и загрузчиками в LoopBack 4:

// /src/controllers/redirect.controller.ts
import {inject} from '@loopback/context';
import {get, Response, RestBindings} from '@loopback/rest';

export class RedirectController {
  constructor(@inject(RestBindings.Http.RESPONSE) private res: Response) {}

  // Map to `GET /redirect`
  @get('/redirect', {
    responses: {
      '302': {
        description: 'Redirect Response',
      },
    },
  })
  redirect(): void {
    this.res.setHeader('x-secret-sauce', 'Sugar, spice and everything nice.');
    this.res.redirect('https://www.example.com/');
  }
}

Приведенный выше фрагмент кода показывает, как установить заголовок ответа и вернуть перенаправление. Хотя можно использовать любые части 1036 *. js Response API .

Дополнительная информация:

1 голос
/ 17 апреля 2020

Я прерываю содержимое stati c в loopback 4 следующим образом.

export class InstrideIdentityApiApplication extends BootMixin(
  ServiceMixin(RepositoryMixin(RestApplication))
) {
  this.static('/', path.join(__dirname, '../../public'));
}

Однако вы можете запустить сервер express и обслуживать содержимое c с express, а затем bing loopback 4 и приложение express вместе.

https://loopback.io/doc/en/lb4/express-with-lb4-rest-tutorial.html

...