我遇到了一个我不太懂的问题。我有一个服务器简单node js
页面的index.html
服务器(这实际上是有角度的)。我的服务器代码如下所示:
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);
});
我的html页面,我有访问localhost:7000
和访问socket.io
的{{1}}和localhost:7000
的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 service
和socket.io call
。我在chrome上安装了CORS。当我启用它时,socket.io不起作用,但service
有效。。当我停用它时,服务无效,socket.io
会执行:。你能帮我找一个解决方案吗?
更新 我尝试了许多提议的解决方案here。但他们不适合我。
答案 0 :(得分:0)
试试这个,
app.use(cors({
origin: function (origin, callback) {
var allowed = ['http://localhost:7000'].indexOf((origin || '').toLowerCase()) !== -1;
callback(null, allowed);
}
}));
答案 1 :(得分:0)
由于错误消息显示:
'Access-Control-Allow-Origin'中不能使用通配符'*' 凭证标志为真时的标头
为什么不尝试设置原点?
我会使用以下中间件:
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:4000");
next();
});
这假设凭证标志是绝对必要的。