如何在 Loopback 4.0 中提供静态内容?

How to serve static content in Loopback 4.0?

我在环回上找到了这个问答,但它不适用于 4.0: strongloop loopback how do I serve-static with a route?

我想提供一些基本的静态内容。或者甚至是任意内容。

这是 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 中都不起作用。我尝试找到一种方法来访问隐藏在 Loopback 中某处的实际 express 实例(我很确定它使用了一个),但我似乎无法找到它。

如何使环回服务于静态内容?

我正在通过以下方式切断环回 4 中的静态内容。

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

但是,您可以 运行 一个 express 服务器并从 express 提供静态内容,然后 bing loopback 4 和 express 应用程序一起提供。

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

要提供静态文件,可以使用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 re-use 它的某些功能,但在正常情况下它不会公开整个 API。

RestBindings.Http 下有一些绑定可用于将 Express.js RequestContext、Request 或 Response objects 注入控制器。但是,这应该被视为最后的手段。

如果需要访问这些绑定,强烈建议将它们注入控制器以利用 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/');
  }
}

以上代码片段显示了如何设置响应 header 和 return 重定向。尽管可以使用 Express.js Response API 的任何部分。

进一步阅读: