Angular4和Node Server - 对预检请求的响应不通过访问控制

时间:2018-04-15 01:03:09

标签: angular

我在版本4中有一个Angular应用程序。我有一个节点服务器。在发布我的表单后,我收到了标题中提到的错误。

无法加载http://localhost:3100/postEmployee:对预检请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,不允许来源“http://localhost:3000”访问

节点服务器代码如下: -

var http=require('http');
var formidable=require('formidable');
var util=require('util');

var server=http.createServer(function(req,res){
    res.setHeader('Access-Control-Allow-Origion','*');
    res.setHeader('Access-Control-Allow-Headers',
    'Origion, X-Requested-With,Content-Type,Accept');

    if(req.method.toLowerCase( )== 'post')
    {
        processForm(req,res);
    }
    res.end();
});

function processForm(req,res){
    console.log('Inside processForm');
var form=new formidable.IncomingForm();
form.parse(req,function(err,fields){

    res.writeHead(200,{
        'content-type':'text\plain'
    });

    res.end(unil,inspect({
        fields:fields
    }));

    console.log('posted fields\n');
    console.log(util.inspect({
            fields:fields
    }));

})

}

var port=3100;
server.listen(port);
console.log("server listening on port " + port);

我可以在命令提示符下看到服务器正在运行并正在侦听端口3100。

我尝试了与铬有关的固定铬相关的东西但是同样没有用。

以下是发布表单的服务中的代码: -

postEmployeeForm(employee : Employee) : Observable<any>{
    let body=JSON.stringify(employee);
    let headers=new Headers({'Content-Type':'application/json'});

    let options= new RequestOptions({headers:headers});

    return this.http.post("http://localhost:3100/postEmployee"
    ,body,options)
                .map(this.extractData)
                .catch(this.handleError);
    //console.log('posting employee : ' + JSON.stringify(employee));
}

任何指针都会有所帮助。

提前感谢。

SIDD

2 个答案:

答案 0 :(得分:1)

我发现使用*作为原点是有问题的,所以我通常会根据环境将其设置为特定的网址。

您的里程可能会有所不同,但这是我在使用Express或Nest.js开发API时通常设置的内容:

'Access-Control-Allow-Origin', '[your-exact-origin-url]'
'Access-Control-Allow-Methods', 'DELETE, GET, POST, PUT, OPTIONS'
'Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
'Access-Control-Allow-Credentials', true

希望能帮到你。

答案 1 :(得分:0)

以下是更改(缺少return语句): -

var http=require('http');
var formidable=require('formidable');
var util=require('util');

var server=http.createServer(function(req,res){
    res.setHeader('Access-Control-Allow-Origion','*');
    res.setHeader('Access-Control-Allow-Headers',
    'Origion, X-Requested-With,Content-Type,Accept');

    if(req.method.toLowerCase( )== 'post')
    {
        processForm(req,res);
***return;***
    }
    res.end();
});