将Nginx与express.router一起使用时,CORS插件不起作用

时间:2018-12-27 09:02:57

标签: node.js express nginx cors

我的Nginx default.conf如下:

server {
listen       80;
server_name  localhost;

#charset koi8-r;
#access_log  /var/log/nginx/host.access.log  main;

location / {
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

#error_page  404              /404.html;

# redirect server error pages to the static page /50x.html
#
error_page   500 502 503 504  /50x.html;
location = /50x.html {
    root   /usr/share/nginx/html;
}

location /statisticAPI/
{
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

    proxy_pass "http://api-server:8086";
    proxy_set_header     X-Source external;
    proxy_buffering      off;
    client_max_body_size 0;
    proxy_read_timeout   3600s;
    proxy_redirect       off;
}
location /alertAPI/
{
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

    proxy_pass "http://api-server:8086";
    proxy_set_header     X-Source external;
    proxy_buffering      off;
    client_max_body_size 0;
    proxy_read_timeout   3600s;
    proxy_redirect       off;
} }

到目前为止,我在节点服务器中有2个API模块, 在APIserver.js中

var config = require('./config.json');
var Express = require('express');
var app = Express();
var cors = require('cors');
var statisticAPIRouter = require('./routes/statisticAPI')
var alertAPIRouter = require('./routes/alertAPI')

app.use(Express.urlencoded({extended: true}));
app.use(Express.json());
app.use(cors());

app.use('/statisticAPI',statisticAPIRouter)
app.use('/alertAPI',alertAPIRouter)
app.listen(config.listenPort, () => console.log('Statistic API server listening on port '+config.listenPort));

在statisticAPI.js中,我有2条路由

var express = require('express');
var router = express.Router();

router.get('/getFromTimePeriod', getFromTimePeriod)
router.get('/getMinMaxbyHour', getMinMaxbyHour)

我使用axios通过完美的前端API来获取数据。

然后在alertAPI.js中

var express = require('express');
var router = express.Router();

router.get('/',getAlertData)

我也使用axios来获取数据,但是这次发生了CORS问题,错误是所请求的资源上没有'Access-Control-Allow-Origin'标头。

但是如果将router.get('/',getAlertData)替换为router.get('/noti',getAlertData),一切都很好!

据我所知,app.use(cors())时;每个路由和应用程序请求标头都将添加 Access-Control-Allow-Origin:'*'
但是,如果我在没有Nginx的情况下运行APIserver.js,则可以正常运行 请有人可以帮助我解决我的问题,我将不胜感激。我在这个问题上坚持了1天。

0 个答案:

没有答案