xit*_*tas 1 express typescript nestjs
我一直在阅读和实施很多解决方案,但似乎没有任何效果。
我正在使用 Nestjs ServeStatic 作为他们的官方文档并遵循 StackOverflow 的问题。
但似乎没有任何作用。
到目前为止我的代码
应用程序模块.ts
import { ServeStaticModule } from '@nestjs/serve-static/dist/serve-static.module';
import { join } from 'path';
@Module({
imports: [
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', 'public'),
}),
],
controllers: [AppController],
providers: [AppService],
})
Run Code Online (Sandbox Code Playgroud)
我的文件夹结构
/Source
|-public
|--img.jpg
|-src
|--app.module.ts
|--app.controller.ts
|--main.ts
Run Code Online (Sandbox Code Playgroud)
尝试通过访问该文件
http://localhost:3000/public/img.jpg
Run Code Online (Sandbox Code Playgroud)
错误:
[Nest] 3320 - 06/17/2021, 5:24:42 PM [ExceptionsHandler] ENOENT: no such file or directory, stat 'F:\code\dist\public\index.html' +3898ms
Error: ENOENT: no such file or directory, stat 'F:\code\dist\public\index.html'
Run Code Online (Sandbox Code Playgroud)
我一直在关注的问题
xit*_*tas 16
问题是它正在dist文件夹中查找文件。为了解决这个问题,我们必须向上一级,之后,它得到唯一的index.html,因此我们必须添加serveRoot
代码
import { ServeStaticModule } from '@nestjs/serve-static/dist/serve-static.module';
import { join } from 'path';
@Module({
imports: [
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', '../public'), // added ../ to get one folder back
serveRoot: '/public/' //last slash was important
}),
],
controllers: [AppController],
providers: [AppService],
})
Run Code Online (Sandbox Code Playgroud)
您可能缺少main.ts.
app.useStaticAssets(join(__dirname, '..', 'public'), {
prefix: '/public',
});
Run Code Online (Sandbox Code Playgroud)
您不需要ServeStaticModule在您的app.module.ts.
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', 'public'),
// serveRoot: 'public'
}),
Run Code Online (Sandbox Code Playgroud)
您也可以将其从您的main.ts.
app.use(express.static(__dirname + 'public'));
app.use('/', express.static('../public'));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5640 次 |
| 最近记录: |