简体   繁体   English

Angular http.post作为Options方法的请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM