javascript - NestJS 根据浏览器的语言传递静态文件
问题描述
Nestjs 应该基于浏览器中定义的语言交付一个 Angular 应用程序。
Angular 应用程序位于dist/public/en
或上dist/public/de
。
如果用户使用/
英文浏览器访问,nestjs 应该从文件夹传递文件dist/public/en
。在这种情况下,浏览器中的路径应指向fqdn/en/
.
我已经将它与单语言 Angular 应用程序一起使用:
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.useStaticAssets(join(__dirname, 'public'));
await app.listen(process.env.PORT || 3000);
}
bootstrap();
我还查看了看起来很有希望的i18next。
但我不确定这是否是正确的方向。
任何小费都受到热烈欢迎。
解决方案
比dist
静态提供文件夹更好的方法是将所有非 api 路由重定向到,index.html
以便您的 Angular SPA 可以处理路由。有关更多详细信息,请参阅此答案。
您可以通过考虑要检测用户语言的因素(例如ACCEPT-LANGUAGE
标头或某个 cookie)来调整上面链接答案中的中间件:
@Middleware()
export class FrontendMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: Function) {
// Some way of detecting the user's language
const languages = req.header('ACCEPT-LANGUAGE') || 'en-US';
if (languages.contains('de-DE')) {
res.sendFile(join(__dirname, 'public', 'de' ,'index.html'));
} else {
res.sendFile(join(__dirname, 'public', 'en', 'index.html'));
}
}
}
推荐阅读
- php - 我需要在 PHP docblock 中使用 splat 运算符,但无法弄清楚如何转义字符
- c# - 在添加新数据之前检查现有列表中是否已存在值
- typescript - 有条件地将输入转换为 Typescript 函数
- python - scikit-learn:FeatureUnion 包含手工制作的功能
- amazon-s3 - AWS S3:删除最后一个文件后如何维护空目录结构
- csvhelper - 返回时处理 CsvHelper.GetRecords
- c - 为什么要向堆栈指针添加地址?
- javascript - 有没有办法在 Vue.js 中的窗口刷新或窗口关闭之前更新 Firestore?
- python - Visual Studio Code - 没有这样的文件或目录
- react-native - redirectToCheckout 使用 React Native 进行条带结账