[英]Angular http.post as Options method request
I'm trying to post some data to node server, but I have an issue: 我正在尝试将一些数据发布到节点服务器,但是我遇到了一个问题:
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);
}
This is my post request by in Network tab I see this as Options method while on server I'm expecting a post request. 这是我的发帖请求,在“网络”选项卡中,我在服务器上期待发帖请求时将其视为“选项”方法。
If I omit options from http.post then I get post request on server, but then I have error about unexpected content type. 如果我忽略了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);
}
Is this expected behaviour or I'm doing something wrong with post. 这是预期的行为,还是我在帖子中做错了什么。 I found this code on official angular guide: server-communication How to handle this situation, do I need to change something on client side or should I handle that on server side? 我在官方角度指南中找到了以下代码: 服务器通信如何处理这种情况,我是否需要在客户端进行某些更改,还是应该在服务器端进行处理?
EDIT: 编辑:
This is my server code: 这是我的服务器代码:
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);
The problem is on server side. 问题出在服务器端。 You need to implement hanlder for options. 您需要实现hanlder的选项。 example: 例:
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();
});
http://expressjs.com/en/api.html#app.METHOD http://expressjs.com/en/api.html#app.METHOD
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.