Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 尝试POST请求时出现CORS问题_Angularjs_Node.js_Cors_Http Post - Fatal编程技术网

Angularjs 尝试POST请求时出现CORS问题

Angularjs 尝试POST请求时出现CORS问题,angularjs,node.js,cors,http-post,Angularjs,Node.js,Cors,Http Post,我正试图从运行在4200端口上的angularJS应用程序向运行在不同端口3000上的nodeJS应用程序发送post请求,如下所示 AngularJS 2.0代码: addNewItem(body:string) { const headers = new Headers(); headers.append('Content-Type','application/json'); return this.http.post('http://10.244.1.59:3000

我正试图从运行在4200端口上的angularJS应用程序向运行在不同端口3000上的nodeJS应用程序发送post请求,如下所示

AngularJS 2.0代码:

addNewItem(body:string) {
    const headers = new Headers();
    headers.append('Content-Type','application/json');
    return this.http.post('http://10.244.1.59:3000/newBinDevice',body,{
      headers: headers
    })
    .map((response : Response) => response.json());
  }
NodeJS代码

var express = require('express');

    module.exports = function(app){
        var db = require('./dbclient');
        var bodyParser = require('body-parser');
        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded({extended:true}));
        db.dbconnection(null,null,null,null,'smartbin',null);
        app.post('/newItem', function(req, res, next) { 
            res.header("Access-Control-Allow-Origin", "*");
            //res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
            res.header("Access-Control-Allow-Headers", "Content-Type"); 
            res.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
            console.log('body request is ' +  req.body + " after stringifying it " + JSON.stringify(req.body) + " array to string " + req.body.toString());
    }
我收到的CORS问题是,对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。起源'http://localhost:4200因此,不允许访问。响应的HTTP状态代码为404。我在某个地方读到,一个人只能发送数据

application/x-www-form-urlencoded
multipart/form-data
text/plain

当我试图从AngularJS应用程序以字符串而不是JSON对象的形式发送数据时,我在nodejs应用程序上得到的是空数据。

您需要向express应用程序添加更多中间件来支持

您可以使用以下软件包:

这将启用包的默认CORS配置。配置选项在中有详细概述


您问题中的代码的问题是,您在POST响应中包含了CORS头,但它们需要在飞行前选项响应中返回。与其编写自己的CORS实现,不如建议使用上面提到的包。

我是stackoverflow的新手,但不久之前就遇到了这个问题:

在应用程序中使用此代码

var cors = require('cors');


app.use(cors({
    'allowedHeaders': ['sessionId', 'Content-Type'],
    'exposedHeaders': ['sessionId'],
    'origin': '*',
    'methods': 'GET,HEAD,PUT,PATCH,POST,DELETE',
    'preflightContinue': false

}));

并确保在浏览器中禁用CORS扩展名(如果有)。

更新了答案。我对上述代码做了如下小改动。var cors=要求“cors”;var copions={origin:*,方法:GET、HEAD、PUT、POST、OPTIONS、preflightContinue:true};app.post'/newBinDevice',corscoptions,functionreq,res,next{console.logJSON.stringifyreq.body;}尽管服务器正在获取post请求,post参数值仍作为空json对象接收。无法找出此处的问题所在。请不要使用Preflight Continue。浏览器将发送两个请求:第一个使用选项方法;第二种是使用POST方法。选项请求是飞行前请求;你不想在邮寄路线上处理这个问题。让cors模块处理选项请求/响应。你看不到正文,因为它没有在选项请求中传递。我完全删除了Preflight Continue,并测试了将其设置为false。在这两种情况下,我仍然接收空的JSON对象。当我在浏览器上查看请求负载时,我能够在请求负载中看到JSON对象。但在服务器端,我收到的是空对象。如果请求到达您的post路由,则CORS问题得到解决。无论尸体是否如你所期望的那样到达,都与CORS无关。对于CORS,请求是允许的还是不允许的。您的CORS问题已经解决,我认为,与其更新/扩展您的问题以解决您的身体问题,不如提出一个新的、与身体相关的问题。
var cors = require('cors');


app.use(cors({
    'allowedHeaders': ['sessionId', 'Content-Type'],
    'exposedHeaders': ['sessionId'],
    'origin': '*',
    'methods': 'GET,HEAD,PUT,PATCH,POST,DELETE',
    'preflightContinue': false

}));