node.js - 请求的资源上不存在“Access-Control-Allow-Origin”标头。CORS plicy 已阻止对 XMLHttpRequest 的访问
问题描述
我正在使用 angular 和 nodejs 构建电子商务,当我尝试获取产品时出现此错误:**Access to XMLHttpRequest at 'http://localhost:3000/api/products?limit=10' from origin “http://localhost:4200”已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。** 我已经安装了 cors 并在后端的 app.js 文件中使用了它。这是我的代码:
export class HomeComponent implements OnInit {
products: any[] = [];
constructor(private productService: ProductService,
private router: Router) {
}
ngOnInit(): void {
this.productService.getAllProducts().subscribe((prods: { count: Number, products: any[] }) => {
this.products = prods.products;
});
}
selectProduct(id: Number) {
this.router.navigate(['/product', id]).then();
}
}
这是我的 home.component.ts
export class ProductService {
private SERVER_URL = environment.SERVER_URL;
constructor(private http: HttpClient) { }
/* This is to fetch all products from the backend server */
getAllProducts(numberOfResults= 10) {
return this.http.get(this.SERVER_URL + '/products', {
params: {
limit: numberOfResults.toString()
}
});
}
}
这是我的 product.service.ts
解决方案
你需要在你的应用程序中允许跨域,这意味着哪些网站可以与你的后端应用程序通信,在这个另一个网站将是前端,它位于 localhost:4200 你可以通过在你的 Nodejs 中输入这个来允许它应用程序
const express = require("express");
const app = express();
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "http://localhost:4200");
res.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS");
if (req.method == "OPTIONS") {
return res.sendStatus(200);
}
next();
});
如您所见,上面的代码设置标题以允许 CORS。
推荐阅读
- kaleido - 唤醒节点
- node-sass - which one to use between node-sass vs node-sass-middleware?
- express - 使用 express & node 将串口数据发送到前端
- r - R割数格式指数
- java - 无法在远程服务器中发送电子邮件
- java - 方法之前的日历在不应该返回true时返回
- sharepoint - 如何使用不同名称但应维护版本的新文档覆盖 SharePoint 库中的现有文档?
- php - python中的sha512哈希不等于php中的sha512哈希
- python - 如何在使用 LSTM 进行预测时添加更多参数
- angular - 拖动标记不刷新地点地址