跨源资源共享(CORS
)是一种允许从另一个域请求资源的机制。在底层,Nest
使用了Express的cors 包,它提供了一系列选项,您可以根据自己的要求进行自定义。
为了启用 CORS
,必须调用 enableCors()
方法。
const app = await NestFactory.create(AppModule);
app.enableCors();
await app.listen(3000);
该enableCors()
方法需要一个可选的配置对象参数。这个对象的可用属性在官方 CORS 文档中有所描述。另一种方法是传递一个回调函数,来让你根据请求异步地定义配置对象。
或者通过 create()
方法的选项对象启用CORS。将 cors
属性设置为true
,以使用默认设置启用CORS。又或者,传递一个 CORS 配置对象 或 回调函数 作为 cors
属性的值来自定义其行为。
const app = await NestFactory.create(AppModule, { cors: true });
await app.listen(3000);
又或者
main.ts添加
app.enableCors(corsOptionsDelegate);
import { Request } from 'express';
//设置允许访问的域名
const allowlist = ['http://localhost:8080'];
const corsOptionsDelegate = (req: Request, callback) => {
let corsOptions;
console.log("req.header('Origin')",req.header('Origin'))
if (allowlist.indexOf(req.header('Origin')) !== -1) {
console.log("req.header('Origin')",req.header('Origin'))
//如果你不需要 Cookie 可以设置为 *
// credentials 与前端的axios 的withCredentials(XMLHttpRequest.withCredentials)
// 同时 origin必须设置为访问域 才能正常访问,主要是为了 凭证是 Cookie ,授权标头或 TLS 客户端证书
corsOptions = { origin: req.header('Origin'),credentials : true };
} else {
corsOptions = { origin: false }; // disable CORS for this request
}
callback(null, corsOptions); // callback expects two parameters: error and options
}
export default corsOptionsDelegate
两者不可以同时混为使用