2017-03-07 4 views
0

Node.js를 사용하여 내 grafana 페이지에 로그인 할 때 기본 인증을 사용하려고하는데 익스프레스가 표시됩니다. 다음과 같은 오류가 발생했습니다. enter image description hereNode.js에서 요청한 리소스에 'Access-Control-Allow-Origin'헤더가 없습니다.

'로컬 호스트 : 4000' '로컬 호스트 : 5000'내 app.js를 보유하고 내 grafana 페이지로 proxy_pass 그의 nginx에서입니다 (로컬 호스트 : 8080)

다음

내 기본 인증 코드

입니다
app.get('/grafana', isLoggedIn, function(req, res, next){ 
    console.log('Accessing to grafana'); 
    var auth = "Basic " + new Buffer('admin' + ":" + 'admin').toString("base64"); 
    request({ 
    url: 'http://localhost:5000', 
    headers:{ 
     "Authorization": auth 
    }    //passing through here 
    }, function(err, resp, body){ 

여기 내 문제는 무엇입니까? 아래처럼 Access Control-Allow-Origin 등을 추가했지만 전혀 작동하지 않습니다.

app.all('*', function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', "*"); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); 
    res.header('Access-Control-Allow-Headers', 'Origin, Basic, X-Requested-With, Content-Type, Accept, Authorization'); 
    res.header('Access-Control-Allow-Credentials', 'true'); 
    next(); 
}); 

아무도 아이디어가 없나요?

+0

오류는 클라이언트 측 코드가'localhost : 5000'의 프록시가 아닌'localhost : 8080'과 직접 통신하려고 시도하고 있음을 나타냅니다. – robertklep

답변

2

내가 생각하기에, 당신은 cors를 설치해야합니다 .. 감사합니다.

npm install cors 

간단한 사용법 :

var express = require('express'); 
var cors = require('cors'); 
var app = express(); 
app.use(cors()); 


app.use(function (req, res, next) { 

     // Website you wish to allow to connect 
     res.setHeader('Access-Control-Allow-Origin', '*'); 

     // Request methods you wish to allow 
     res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); 

     // Request headers you wish to allow 
     res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); 

     // Set to true if you need the website to include cookies in the requests sent 
     // to the API (e.g. in case you use sessions) 
     res.setHeader('Access-Control-Allow-Credentials', true); 

     // Pass to next layer of middleware 
     next(); 
    }); 

가 심판 수 : here

+0

제 질문에 답변 해 주셔서 감사합니다! :) 음 .. 이미 같은 코드를 사용하려고했습니다. var cors = require ('cors'); var corsOption = {출처 : 'http : // localhost : 4000'}; 및 app.use (cors (corsOption)); 함수 (err, resp, body) 내부 – paulc1111

+0

그러나 작동하지 않습니다 ... 이유를 모르겠다 .. – paulc1111

+0

@ paulc1111. 내 대답을 다시 검토 할 수 있습니다. 더 많은 코드를 추가했습니다 ... – NguyenTungs

0

이이 question about using an Apache proxy for Grafana과 유사합니다보다 cors 더. 어떻게 당신의 nginx 프록시가

http://docs.grafana.org/v1.9/installation/#graphite-server-config

auth_basic   "Restricted"; 
auth_basic_user_file /path/to/my/htpasswd/file; 

if ($http_origin ~* (https?://[^/]*\.somedomain\.com(:[0-9]+)?)) { #Test if request is from allowed domain, you can use multiple if 
    set $cors "true";            #statements to allow multiple domains, simply setting $cors to true in each one. 
} 

if ($cors = 'true') { 
    add_header Access-Control-Allow-Origin $http_origin;   #this mirrors back whatever domain the request came from as authorized, as 
    add_header "Access-Control-Allow-Credentials" "true";   #as long as it matches one of your if statements 
    add_header "Access-Control-Allow-Methods" "GET, OPTIONS"; 
    add_header "Access-Control-Allow-Headers" "Authorization, origin, accept"; 
} 

을 구성됩니다

여기에 문서에 Nginx에 대한 예제가있다?

+0

"ifs are evil"을 잊었습니다. https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ – Alkaline