我在版本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
答案 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();
});