使用NestJS在OPTIONS上找不到404

Fra*_*rzi 10 node.js cors http-options-method typescript nestjs

我是NestJS的新手,在我的网络应用尝试查询的每条路线上,它都在OPTIONS请求上失败,得到:

{"statusCode":404,"error":"Not Found","message":"无法选择/验证"}

但尝试直接GET或POST请求工作正常.

Fra*_*rzi 13

经过一些研究后,我意识到我只需要启用CORS(Access-Control-Allow-Origin),我可以通过编辑main.ts和传递cors: trueNestFactory.create选项(第二个参数)来实现.

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, { cors: true });
  await app.listen(3000);
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)

  • @KamilMyśliwiec 这对我来说仍然不起作用。app.enableCors() 也没有。所有 HTTP OPTIONS 请求都会失败并返回 404。不确定出了什么问题 (3认同)
  • cors是内置功能,请参见此处以获取更多详细信息:https://docs.nestjs.com/techniques/cors :) (2认同)

mum*_*sNZ 6

如果您通过以下方式启用了CORS,则可以获得一些额外的信息:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, { cors: true });
  await app.listen(3000);
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)

这将允许来自任何域的跨源请求。这通常不是安全性最佳实践。

如果要允许CORS截获预检请求,但又只允许来自服务器内部的原始请求,则可以使用以下配置:

.....
  const app = await NestFactory.create(ApplicationModule, {cors: {
    origin: true,
    preflightContinue: false,
  }});
.....
Run Code Online (Sandbox Code Playgroud)