2016-11-05 7 views
0

私は本当に理解していないという問題があります。私はサーバがindex.htmlページ(これは実際には角度があります)のnode jsサーバを持っています。私のサーバーのコードは次のようになります。ノードjsでCORSを有効にする方法は?

var express = require('express'); 
var app = express(); 
var cors = require('cors') 
var port = 4000; 
var path = require("path"); 
var bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 

app.use(express.static('.')) 
console.log(__dirname + '/.'); 

app.use(cors({ 
    origin: true, 
    credentials: true 
})); 



app.get("/", function(res, req){ 
    req.sendFile(path.join('/index.html')); 
}); 


app.listen(port,'0.0.0.0' , function(){                                 
    console.log("listening on * "+ port); 
}); 

I私のhtmlページ、私が持っているとlocalhost:7000にアクセスしているlocalhost:7000socket.ioにアクセスしているサービスをangularjs。 私のサービスは次のようになります。

if(param){ 
    $scope.isloading = true; 
    $http.post(
    'http://' + $location.host() + ':7000/container', 
    { "method": "start", "nomber": param } , 
    {} 
    ).then(function(err, data){ 
    console.log("No error : "); 
    console.log(data); 
    if (err){ 
     console.log(err); 
    } 
    $scope.isloading = false; 
    console.log("end Loading" + $scope.isloading); 
    }, function(err, data){ 
    $scope.isloading = false; 
    console.log("error "); 
    }); 
} 

とsocket.ioへのHTML呼び出しはこれです:

<script>var socket = io.connect('http://localhost:7000'); 
    socket.on("news", function(data){ 
    console.log(data); 
    });</script> 

私の問題は、私は同時にangular servicesocket.io callを許可することができませんということです。私はCORSをクロムにインストールしました。有効にすると、socket.ioは動作しませんが、serviceが動作します。 enter image description here。私がそれを無効にするとサービスは動作せず、socket.ioenter image description hereです。解決策を見つけるのを助けてくれますか?

更新 私は多くのソリューションを提案しましたhereを提案しました。しかし、彼らは私のために働かない。

+0

私はこれらすべてのソリューションを試しましたが、どれも私のために働いていないようです。 – dmx

答えて

0

エラーメッセージが言うので

app.use(cors({ 
    origin: function (origin, callback) { 
     var allowed = ['http://localhost:7000'].indexOf((origin || '').toLowerCase()) !== -1; 
     callback(null, allowed); 
    } 
})); 
0

、次のように試してみてください:とき

ワイルドカード「*」が「アクセス制御 - 許可 - 起源」 ヘッダーで使用することはできません資格情報フラグが真である

なぜあなたの原点を設定しようとしませんか?

私は、次のミドルウェアを使用します。

app.use(function (req, res, next) { 
    res.header("Access-Control-Allow-Origin", "http://localhost:4000"); 
    next(); 
}); 

これは、資格情報フラグが絶対に必要であると仮定しています。

関連する問題