我试图将一些数据发布到节点服务器,但我遇到了一个问题:
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);
}
这是我在“网络”标签中的帖子请求,我将其视为“选项”方法,而在服务器上我希望发布帖子请求。
如果我从http.post中省略选项,那么我在服务器上获得发布请求,但是我有关于意外内容类型的错误。
postEmployeeForm(employee: Employee):Observable<any> {
let body = JSON.stringify(employee);
return this.http.post('http://localhost:3100/postemployee', body)
.map(this.extractData)
.catch(this.handleError);
}
这是预期的行为还是我对帖子做错了。我在官方角度指南上找到了这段代码:server-communication 如何处理这种情况,我是否需要在客户端更改某些内容,还是应该在服务器端处理?
编辑:
这是我的服务器代码:
var http = require('http');
var formidable = require("formidable");
var util = require('util');
var server = http.createServer(function(req, res) {
res.setHeader('Access-Control-Allow-Origin','*');
res.setHeader('Access-Control-Allow-Headers','Origin, X-Requested-With, Content-Type, Accept');
if(req.method.toLowerCase() == 'post') {
console.log("Get request!");
processForm(req,res);
return;
}
});
function processForm(req,res) {
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields) {
res.writeHead(200, {
'content-type': 'application/json'
});
res.end(util.inspect({
fields: fields
}));
console.log('posted fields:\n');
console.log(util.inspect({
fields: fields
}));
});
}
var port = 3100;
server.listen(port,'localhost');
console.log("server listening on port " + port);
答案 0 :(得分:2)
问题出在服务器端。您需要为选项实现hanlder。 例如:
app.options("*",function(req,res,next){
res.header("Access-Control-Allow-Origin", req.get("Origin")||"*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
//other headers here
res.status(200).end();
});