angular - Nginx Cors Angular9 RestApi
问题描述
我是一个角度初学者,并尝试部署一个 CRUD 应用程序。我找到了这个src,编译成功,上传到我的 vps 但是当我在浏览器上查看时,我遇到了 Cors 错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:3000/api. (Reason: CORS request did not succeed).
我安装了 nginx 服务器并设置 /etc/nginx/sites-available/mySite.com :
server{
listen 80;
listen [::]:80;
root /var/www/mySite.com/html;
server_name xxx.xx.xxx.xxx;
location /{
add_header 'Access-Control-Allow-Origin' '*';
try_files $uri /index.html;
}
}
我将站点代码放在 /var/www/mySite/html 中,代理配置和服务器代码放在 /var/www/mySite/api 中,我在其中调用 cors lib:
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var cors = require('cors');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var casesRouter = require('./routes/cases');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/coronavirus', { useNewUrlParser: true, useUnifiedTopology: true });
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
console.log('Connected to MongoDB!');
});
var app = express();
app.use(cors());
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/api', casesRouter);
module.exports = app;
..这是 Firefox (68.8.0esr) 网络选项卡的屏幕截图:
..和 Chromium 屏幕截图:
Nginx 和 RestApi 中的 Cors 设置无效。任何想法 ?
谢谢
ps:我使用 npm (v6.14.4)、node(v13.12.0)、nginx (1.14)
解决方案
在节点应用程序中,您可以执行以下操作:
app.use((req, res, next) => {
const requestedHeaders = req.header('Access-Control-Request-Headers');
const parsedHeaders = [];
if (typeof requestedHeaders === 'string') {
parsedHeaders.push(...requestedHeaders.toLowerCase().split(','));
}
res.header('Access-Control-Allow-Origin', req.headers.origin);
// res.header('Access-Control-Allow-Origin', '*');
if (parsedHeaders.length) {
res.header('Access-Control-Allow-Headers', parsedHeaders.join(', '));
}
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
next();
});
而不是或之后
app.use(cors());
推荐阅读
- c# - 在尝试转换模型之前检查 JsonDeserializer
- angular - 具有秋田状态管理的 Angular 解析器
- javascript - 在没有节点或 express 的 PHP 应用程序中进行 JavaScript 测试?
- python - Python附加到数据框中的特定列
- msbuild - 对于从同一 MSBuild 任务调用的所有子项目,“ProjectStartedEventArgs.TargetNames”是否相同?
- java - 使用 JNI 将函数指针从 C++ 行为返回到 Java 对象
- docker - Docker 插件和带有 Jenkins 管道的 Docker 有什么区别
- python - Python - Tkinter over xrdp 显示问题
- javascript - 需要在 JS var 中存储 html 日期输入
- linux - 系统调用 WRITE 不会从堆栈中写入?