【发布时间】:2020-12-05 07:44:06
【问题描述】:
我开始学习 MEAN 堆栈,当我去 Express 时,我看到 express 框架中存在一个额外的层,称为 NestJS。它拥有我想要的一切,并且具有类似 Angular 的语法,因此对我来说非常完美。
但是每一个新步骤都是一场噩梦,文档一点用都没有。现在我正在与框架进行斗争以实现提供图像并且不使用 API 进行此类调用。
我尝试了所有在互联网上找到的,例如:
main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as bodyParser from 'body-parser';
import * as express from 'express';
import { join } from 'path';
import { NestExpressApplication } from '@nestjs/platform-express';
declare const module: any;
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.useStaticAssets(join(__dirname, '..', 'public'));
app.enableCors({
origin: true,
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS',
credentials: true,
});
//I tried this 2 options (https://docs.nestjs.com/techniques/mvc) (https://whatthecode.dev/serve-static-files-with-nest-js/)
app.use('/resources', express.static(process.cwd() + '\\resources'));
app.useStaticAssets(join(__dirname, '..', '\\public'));
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
//console.log(process.cwd());
await app.listen(3000);
if (module.hot) {
module.hot.accept();
module.hot.dispose(() => app.close());
}
}
bootstrap();
我试图把它放在 app.module 中(它有效,但总是在寻找 index.html 而不是图像):
import { AnimalsModule } from './animals/animals.module';
import { SpeciesModule } from './species/species.module';
import { AuthModule } from './auth/auth.module';
import { UsersModule } from './users/users.module';
import { BreedModule } from './breed/breed.module';
import { StateModule } from './state/state.module';
import { PhotoModule } from './photo/photo.module';
@Module({
imports: [
ServeStaticModule.forRoot({
rootPath: join(__dirname, '..', 'public'), // <-- path to the static files
}),
TypeOrmModule.forRoot({
type: 'mysql',
host: 'localhost',
port: 3306,
username: 'root',
password: '',
database: 'nest',
entities: [__dirname + '/**/*.entity{.ts,.js}'],
synchronize: true,
}),
AnimalsModule,
SpeciesModule,
BreedModule,
StateModule,
AuthModule,
UsersModule,
PhotoModule,
],
})
//It seems that ignores this register and just uses the method signature options
@Module({
imports: [MulterModule.register({
dest: './resources/tmp',
limits: { fieldSize: 25 * 1024 * 1024 * 1024, fileSize: 25 * 1024 * 1024 * 1024 }
})],
controllers: [AppController],
providers: [AppService],
})
export class AppModule { }
我怎么能提供图像或文件并避免 api 路由?
谢谢大家。
【问题讨论】:
-
鉴于这样的配置(看起来不错),您能否分享您的静态文件夹
public目录结构和您尝试过的一些静态资产的简单 GET? -
嗨,我有这个结构:project/resources /tmp /files project/public(只是为了尝试这个名称,因为在示例中更常见)我的 GET 请求放在浏览器中localhost:3000/resources/a.jpg 或公用文件夹。如果您需要其他事情,请告诉我。非常感谢
-
但是,您将 rootPath 配置如下:
rootPath: join(__dirname, '..', 'public')? -
尝试将您的
a.jpg放入project/public 并通过localhost:3000/a.jpg 获取它 -
rootPath: join(__dirname, '..', 'public')?在原始问题的第二个文件中,我尝试了这个请求,它返回了一个 404 路由,firefox 找不到
标签: javascript node.js express mean-stack nestjs