1.背景
最近在学神光的Nest小册,前边讲到配置静态资源,但是我开始就怎么也访问不到,后来在小册群里群友帮忙解决了,就发一篇文章记录一下。
2. 问题
// main.js
import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import { AppModule } from './app.module';
async function bootstrap() {
// const app = await NestFactory.create(AppModule);
// await app.listen(3000);
// (注意要给 create 方法传入 NestExpressApplication 的泛型参数才有 useStaticAssets这些方法)
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.useStaticAssets('public',{prefix:'/static'});
// app.useStaticAssets(join(__dirname, '..', 'public'));
await app.listen(3000);
}
bootstrap();
然后我在我本地src下建了一个public的文件夹,通过http://localhost:3000/static/index.html 或者 http://localhost:3000/public/index.html 去访问的时候却怎么也访问不到,其实是我的public文件夹的路径应该和src同级,但是我却放到了src里面导致的这个问题。
3.过程
期间我也去看了官方文档,但是也没太清楚上边文档上给出的这个,
app.useStaticAssets(join(__dirname, '..', 'public'));
具体看这个api解释的时候就是说了:Sets a base directory for public assets.
Example: app.useStaticAssets('public') 设置一个基本的路径,那prefix又是干嘛的呢?
后来又继续研究了一下,在根目录新建public目录,然后在目录里面保存一个html比如index.html,这样就可以通过http://localhost:3000/index.html 来访问。
我们也可以配置虚拟目录,比如我们想通过 http://localhost:3000/static/index.html 来访问public目录里面的文件,这时候代码如下:
app.useStaticAssets('public'),{
prefix: '/static/', //设置虚拟路径
});