Nestjs。 TypeError:根路径必须是字符串

问题描述 投票:0回答:2

我在main.ts中配置静态文件文件夹

  app.useStaticAssets({
    root: path.resolve(__dirname + '/public'),
  });

现在在运行时我有一个错误TypeError: root path must be a string我试图使用path.join(__dirname + '/public'), - 没有帮助。

我像import * as path from 'path'一样导入路径

任何想法如何解决?

更新:根据上面的答案,我正在尝试:

app.useStaticAssets(join(__dirname, '..', 'public')); - 得到错误{"statusCode":404,"error":"Not Found","message":"Cannot GET /"}

还尝试过:

app.useStaticAssets({
    root: path.join(__dirname, '..', 'public'),
    prefix: '/public/',
  });

仍然与这一个相同的错误 - TypeError: root path must be a string

我的控制器方法如下:

  @Get()
  root(@Res() res) {
    res.sendFile('index.html');
  }

更新:如果我有app.useStaticAssets(path.join(__dirname, '..', 'public'));并删除root控制器方法仍然有404错误。

typescript express nestjs
2个回答
1
投票

您需要提供prefix财产。

Fix

  app.useStaticAssets({
    root: path.join(__dirname, '..', 'public'),
    prefix: '/public/',
  });

More


1
投票

请注意,对于express和fastify,配置是不同的:

快递(默认)

app.useStaticAssets(join(__dirname, '..', 'public'));

Fastify

app.useStaticAssets({      
    root: join(__dirname, '..', public'),
    prefix: '/public/',
});

join直接导入示例中。

import { join } from 'path';

如果您要提供静态内容,则无需添加特定控制器;资产将通过中间件自动提供。

让我们假设您在/public下有两个文件:index.htmlimage.png

  • localhost:3000localhost:3000/index.htmlindex.html服务
  • localhost:3000/image.pngimage.png服务

没有控制器,请看这个简单的codesandbox example

© www.soinside.com 2019 - 2024. All rights reserved.