如何在 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 的任何部分。
进一步阅读:
我在环回上找到了这个问答,但它不适用于 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 的任何部分。
进一步阅读: