Angular http.post作为Options方法请求

时间:2017-01-21 20:54:30

标签: http angular http-headers

我试图将一些数据发布到节点服务器,但我遇到了一个问题:

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);

1 个答案:

答案 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();
});

http://expressjs.com/en/api.html#app.METHOD