【问题标题】:http error CORS Node JShttp错误CORS节点JS
【发布时间】:2016-06-08 10:39:20
【问题描述】:

我正在创建一个仅使用本机节点 http 的微服务器节点 JS。但只有当我发布表单时,我才会返回一个错误。

按照我正在编写的以下代码:

var http = require('http');
var url = require('url');
var querystring = require('querystring');

var contatos = [
   {nome: "Bruno", telefone: "9999-2222", data: new Date(), operadora:       {nome: "Oi", codigo: 14, categoria: "Celular"}},
   {nome: "Sandra", telefone: "9999-3333", data: new Date(), operadora:        {nome: "Vivo", codigo: 15, categoria: "Celular"}},
   {nome: "Mariana", telefone: "9999-9999", data: new Date(), operadora:                      {nome: "Tim", codigo: 41, categoria: "Celular"}}
 ];

 var operadoras = [
     {nome: "Oi", codigo: 14, categoria: "Celular", preco: 2},
{nome: "Vivo", codigo: 15, categoria: "Celular", preco: 1},
{nome: "Tim", codigo: 41, categoria: "Celular", preco: 3},
{nome: "GVT", codigo: 25, categoria: "Fixo", preco: 1},
{nome: "Embratel", codigo: 21, categoria: "Fixo", preco: 2}
];

var headers = {};
headers["Access-Control-Allow-Origin"] = "*";
headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
headers["Access-Control-Allow-Credentials"] = true;
headers["Access-Control-Max-Age"] = '86400'; // 24 hours
headers["Access-Control-Allow-Headers"] = "X-Requested-With, Access-Control-Allow-Origin, X-HTTP-Method-Override, Content-Type, Authorization, Accept";

http.createServer(function (req, res) {

var url_parts = url.parse(req.url);
switch(url_parts.pathname) {

case '/contatos':
            res.setHeader('Access-Control-Allow-Origin', '*');
            //res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
            //res.header('Access-Control-Allow-Headers', 'Content-Type');
    res.writeHead(200, {'content-Type': 'application/json'});
    res.end(JSON.stringify(contatos));
    break;
case '/operadoras':
            res.setHeader('Access-Control-Allow-Origin', '*');
            res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
            res.setHeader('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
            res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
    res.writeHead(200, {'content-Type': 'application/json'});
    res.end(JSON.stringify(operadoras));
    break;
case '/contatos/inserir':
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.setHeader('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
            var queryData = '';
            req.on('data', function(data) {
                queryData += data;
    });
    req.on('end', function() {
        var obj = querystring.parse(queryData);
        contatos.push(obj);
    });
            res.writeHead(200, {'Content-Type' : 'application/json'});
            res.end('Objeto inserido.');
            break;
default:
    res.writeHead(400, {'Content-Type' : 'application/json'});
    res.end('Rota não encontrada');
}
}).listen(3000, function () {
console.log('server run on 3000');
});

按照以下说明与 http 帖子分享 Angular:

$scope.adicionarContato = function(contato) {
      console.log(contato);
      contato.data = new Date();
      $http.post("http://localhost:3000/contatos/inserir", contato).success(function (data) {

      });
      delete $scope.contato;
      $scope.contatoForm.$setPristine();
    };

现在浏览器中返回的错误:

  Error: JSON.parse: unexpected character at line 1 column 1 of the JSON data
  fromJson@file:///home/tiago/Dropbox/branas_angularjs/lib/angular/angular.js:1252:9
  defaultHttpResponseTransform@file:///home/tiago/Dropbox/branas_angularjs/lib/angular/angular.js:9414:1
 transformData/<@file:///home/tiago/Dropbox/branas_angularjs/lib/angular/angular.js:9505:12
forEach@file:///home/tiago/Dropbox/branas_angularjs/lib/angular/angular.js:336:11
transformData@file:///home/tiago/Dropbox/branas_angularjs/lib/angular/angular.js:9504:3
transformResponse@file:///home/tiago/Dropbox/branas_angularjs/lib/angular/angular.js:10276:23
processQueue@file:///home/tiago/Dropbox/branas_angularjs/lib/angular/angular.js:14745:28
scheduleProcessQueue/<@file:///home/tiago/Dropbox/branas_angularjs/lib/angular/angular.js:14761:27

$RootScopeProvider/this.$get

此代码要点:https://gist.github.com/tiagoeborsanyi/0d2992c67d4cd57f0db5 如果有人可以帮助我,我已经在两天前抓住了它。 : ( 谢谢。

【问题讨论】:

    标签: javascript angularjs json node.js


    【解决方案1】:

    这不是 CORS 错误。代码有问题。尝试使用 Chrome 的开发者工具调试你的 Angular 代码。此外,请检查您的节点日志是否存在错误。

    您将遇到的最常见的 CORS 错误如下所示:

    XMLHttpRequest 无法加载 http://some.api/endpoint。不 请求中存在“Access-Control-Allow-Origin”标头 资源。 Origin 'http://origin.youre/calling/api/from' 因此不允许访问。

    CORS 错误通常会列出请求的域和请求域以及错误说明。在此处了解有关 CORS 的更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-23
      • 2016-06-12
      • 2020-05-02
      • 2016-07-15
      • 2022-11-12
      • 2018-03-27
      • 1970-01-01
      • 2014-10-05
      相关资源
      最近更新 更多