【问题标题】:Nestjs. TypeError: root path must be a string巢穴。 TypeError:根路径必须是字符串
【发布时间】:2023-03-26 03:08:01
【问题描述】:

我在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


    【解决方案1】:

    对于任何人来说都是值得的;我花了一段时间才意识到我的await app.listen(3000); 在我的app.useStaticAssets(join(__dirname, '..', 'public')); 之前。

    【讨论】:

      【解决方案2】:

      注意 express 和 fastify 的配置不同:

      快递(默认)

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

      固定

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

      join在示例中直接导入。

      import { join } from 'path';
      

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

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

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

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

      【讨论】:

      • 嗨,我刚刚用app.useStaticAssets(path.join(__dirname, '..', 'public'));{"statusCode":404,"error":"Not Found","message":"Cannot GET /"}
      • 你能显示你的控制器的代码吗?你加了@Render吗?
      • 我已经编辑了我的答案:只需删除您的控制器方法root 并转到localhost:3000
      • 很有趣,但这并没有帮助。在我删除控制器方法root 后,仍然使用app.useStaticAssets(path.join(__dirname, '..', 'public')); 得到{"statusCode":404,"error":"Not Found","message":"Cannot GET /"}
      • 你使用的是 express 还是 fastify?
      【解决方案3】:

      您需要提供prefix 属性。

      修复

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

      更多

      【讨论】:

      • 仍有问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2020-08-12
      • 2017-05-18
      • 2020-10-21
      相关资源
      最近更新 更多