【问题标题】:Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present in angular js对预检请求的响应未通过访问控制检查:角度 js 中不存在“Access-Control-Allow-Origin”标头
【发布时间】:2016-01-20 06:52:45
【问题描述】:

我使用 node js 使用 nga admin 我是 angular js 和 node js 的新手。我已经使用mysql node js在localhost上创建了rest api,我已经使用邮递员检查了它并且它工作正常。但是当我解析这个 api url 时,它给了我下面的错误。请参阅我想为用户创建管理面板来编辑删除和更新只需要实现基本的东西。但它'向我显示 404 错误 HEADERS ERROR。

XMLHttpRequest 无法加载 http://localhost:3000/api/user?_page=1&_perPage=30&_sortDir=DESC&_sortField=id。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://localhost' 不允许访问。 Server.js 文件包含以下代码。

server.js 文件

var express  = require('express'),
path     = require('path'),
bodyParser = require('body-parser'),
app = express(),
expressValidator = require('express-validator');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json({ type: 'application/vnd.api+json' }));
app.use(bodyParser.json());
var connection  = require('express-myconnection'),
mysql = require('mysql');


app.use(

connection(mysql,{
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'gkv',
    debug    : true //set true if you wanna see debug logger
},'request')

 );

app.get('/',function(req,res){
res.send('Welcome');
});

var router = express.Router();

router.use(function(req, res, next) {
console.log(req.method, req.url);
 console.log(res.headers);
next();
});

var curut = router.route('/user');

curut.get(function(req,res,next){
res.header("Access-Control-Allow-Headers","Content-Type");
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET, PUT, POST,OPTIONS");

req.getConnection(function(err,conn){

    if (err) return next("Cannot Connect");

    var query = conn.query('SELECT * FROM users',function(err,rows){

        if(err){
            console.log(err);
            return next("Mysql error, check your query");
        }
   res.json({message: 'All users!',data: rows });
        //res.render('user',{title:"RESTful Crud Example",data:rows});

     });

     });

     });


 app.use('/api', router);
     var server = app.listen(3000,function(){

      console.log("Listening to port %s",server.address().port);

 });

admin.js 文件

var myApp = angular.module('myApp', ['ng-admin']);
myApp.config(function($httpProvider) {
//Enable cross domain calls
$httpProvider.defaults.useXDomain = true;

//Remove the header containing XMLHttpRequest used to identify ajax call 
//that would prevent CORS from working

delete $httpProvider.defaults.headers.common['X-Requested-With'];
$httpProvider.defaults.headers.common["Access-Control-Allow-Origin"] = "*";
$httpProvider.defaults.headers.common["Accept"] = "application/json";
$httpProvider.defaults.headers.common["content-type"] = "application/json";
});

myApp.config(['NgAdminConfigurationProvider', function (nga) {


// create an admin application
var admin = nga.application('My First Admin')
  .baseApiUrl('http://localhost:3000/api/'); // main API endpoint
// create a user entity
// the API endpoint for this entity will be      'http://jsonplaceholder.typicode.com/users/:id
var user = nga.entity('user');
// set the fields of the user entity list view
user.listView().fields([
    nga.field('Nachname').isDetailLink(true),
    nga.field('Anrede'),
    nga.field('Emailadresse'),
    nga.field('Telefonummer'),
     nga.field('Date&Time'),
     nga.field('URL'),
     nga.field('UserIP'),
]);
user.creationView().fields([
nga.field('Nachname'),
nga.field('Anrede'),
nga.field('Emailadresse'),
nga.field('Telefonummer'),
nga.field('Date'),
nga.field('URL'),
nga.field('UserIP')

]);
//user.editionView().fields(user.creationView().fields());
admin.addEntity(user);
/*var post=nga.entity('posts');
post.listView().fields([
nga.field('id'),
nga.field('title'),
nga.field('userId','reference').targetEntity(user).targetField(nga.field('username')).label('User'),
nga.field('comments','referenced_list').targetEntity(nga.entity('comments')).targetReferenceField('postId').targetFields([nga.field('email'),nga.field('name')]).sortField('id').sortDir('DESC')
]);*/
// add the user entity to the admin application

 //admin.addEntity(post);
// attach the admin application to the DOM and execute it
nga.configure(admin);
}]);

【问题讨论】:

  • 刚刚用谷歌搜索了“access-control-allow-origin node server”并得到了这个 SO 问题stackoverflow.com/questions/7067966/…
  • 我在 npm 中使用了 cors 包,现在可以正常工作了
  • 好吧,请回答您自己的问题,它也可能对其他人有所帮助。
  • nirus 我已经回答了我的问题,请您给我您的电子邮件地址,因为我对 Angular js 和节点知之甚少。

标签: javascript mysql angularjs node.js


【解决方案1】:

我通过将以下内容添加到我的“app.js”文件中解决了我的问题,就像一个魅力。

var app = express()
, cors = require('cors')
, app = express();
app.use(cors());

【讨论】:

    【解决方案2】:

    上述查询已解决,因为我使用了核心包 npm 并使用 node js cmd 安装它并在 server.js 文件中添加了以下代码

    cors = require('cors');
    // use it before all route definitions
    app.use(cors({origin: 'http://localhost'}));
    

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 2018-10-12
      • 2019-09-07
      • 2020-12-07
      • 2016-02-23
      • 2018-05-06
      • 1970-01-01
      • 2017-11-27
      • 2018-02-14
      相关资源
      最近更新 更多