我正在尝试从Nest.js服务器提供图像并添加中间件来跟踪所有请求,但是我唯一能使它起作用的方法是使用express

import { NestFactory } from '@nestjs/core';
import * as bodyParser from "body-parser";
import {AppModule} from "./app.module";
import * as path from "path";
import * as express from 'express';


async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.use(bodyParser.json({limit: '50mb'}));

  app.use(function(req, res, next){
    next();
  });
  //
  app.use('/api/track/',express.static(path.join(__dirname, '/public'))); //Serves resources from public folder
  app.use('/api/track/:img', function (req, res, next) {
    console.log('do something');
    next();
  });

  await app.listen(3333);
}

bootstrap();

如何使用 Controller 或中间件实现它?

最佳答案

The nestjs doc tells you, how to serve static files.简而言之,这是您的操作方法:

在main.ts中指定 Assets 的根目录

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

使用@Res批注可以使用express框架的sendFile方法
@Get('track/:imgId')
test(@Param('imgId') imgId, @Res() res) {
  const imgPath = getImgPath(imgId);
  return res.sendFile(imgPath, { root: 'public' });
}

该解决方案假定您的nestjs安装在后台使用express。

资料来源:
  • https://github.com/nestjs/nest/issues/402
  • https://docs.nestjs.com/techniques/mvc
  • 关于node.js - 如何从Nest.js提供 Assets 并添加中间件以检测图像请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51045980/

    10-09 17:32