Angular4和节点服务器-对飞行前请求的响应不';t通道访问控制

Angular4和节点服务器-对飞行前请求的响应不';t通道访问控制,angular,Angular,我在版本4中有一个角度应用程序。我有一个节点服务器。在发布我的表格后,我得到了我在标题中提到的错误 加载失败:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。因此,不允许源“”访问 节点服务器的代码如下所示:- var http=require('http'); var formidable=require('formidable'); var util=require('util'); var server=http.createServer(functio

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

加载失败:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。因此,不允许源“”访问

节点服务器的代码如下所示:-

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上侦听

我尝试了一些与修复chrome相关的chrome,但同样的方法不起作用

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

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));
}
postEmployeeForm(员工:员工):可观察{
让body=JSON.stringify(employee);
let headers=新的头({'Content-Type':'application/json'});
let options=newrequestoptions({headers:headers});
返回此.http.post(“http://localhost:3100/postEmployee"
,正文,选项)
.map(此.extractData)
.接住(这个.把手错误);
//log('posting employee:'+JSON.stringify(employee));
}
任何指示都会有帮助

提前谢谢


Sidd

我发现使用
*
作为源代码是有问题的,因此我通常根据环境将其设置为特定的URL

您的里程可能会有所不同,但以下是我在使用Express或Nest.js for 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
希望对您有所帮助。

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


您在几个地方有一个输入错误:
Access Control Allow Origin
应该是
Access Control Allow Origin
。您好,Brandon,这似乎有效,因为我可以在控制台上看到一些登录,但我遇到了不同的错误。获得不同的错误是好的。您收到了什么错误?错误:发送后无法设置头。res.writeHead(200,{'content type':'text\plain'});上面的行给出了错误。请参阅:
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();
});