javascript - 如何在 NestJS 中提供静态图像

标签 javascript node.js express mean-stack nestjs

我开始学习 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 路由?
谢谢大家。

最佳答案

这就是我所做的:

  • 在 app.module.ts
     import { ServeStaticModule } from '@nestjs/serve-static/dist/serve-static.module';
     import { join } from 'path';
    
     @Module({
         imports: [
             ServeStaticModule.forRoot({
                 rootPath: join(__dirname, '..', 'public'),
             }),
         ],
     })
    
  • 然后我在与“src”、“dir”等相同的级别上创建了“public”目录。
  • 该文件位于:https://my-url/file.jpg
  • 关于javascript - 如何在 NestJS 中提供静态图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63429380/

    相关文章:

    json - Express.js - Mongo 对象返回未定义

    javascript - Kendo Grid 命令栏——如何用图标替换按钮?

    javascript - 使用 YouTube JS API 检索当前视频的标题

    javascript - 在 socket.io 中发出双重响应

    node.js - Heroku部署错误

    javascript - Node.js 服务器将数据发送到 Backbone 模型

    javascript - 文件API,以编程方式从服务器下载文件并将其存储在沙盒文件系统中

    javascript - 放大和缩小时 Chrome 中的表格行高和列表行高问题

    node.js - 如何在 TS-Node 中声明初始化全局变量?

    node.js - 如何为expressjs应用绑定(bind)域名