Nėra „Access-Control-Allow-Origin“ - mazgas / problema su „Apache Port“

Aš sukūriau nedidelę API, naudojant „Node / Express“, ir bandau ištraukti duomenis naudojant „Angularjs“, bet kadangi mano „html“ puslapis veikia pagal „apache“ „localhost“: 8888 ir mazgas API klausosi 3000 prievado, gaunu „Access-Control-Allow-Origin“. Bandžiau naudoti mezgį -http-proxy ir „Vhosts Apache“, tačiau neturėjau daug sėkmės, žr.

„XMLHttpRequest negali įkelti localhost: 3000. Prašomame šaltinyje nėra„ Access-Control-Allow-Origin “antraštės. Todėl„ localhost: 8888 “neturi prieigos.“

 // Api Using Node/Express var express = require('express'); var app = express(); var contractors = [ { "id": "1", "name": "Joe Blogg", "Weeks": 3, "Photo": "1.png" } ]; app.use(express.bodyParser()); app.get('/', function(req, res) { res.json(contractors); }); app.listen(process.env.PORT || 3000); console.log('Server is running on Port 3000') // Angular code angular.module('contractorsApp', []) .controller('ContractorsCtrl', function($scope, $http,$routeParams) { $http.get('localhost:3000').success(function(data) { $scope.contractors = data; }) // HTML <body ng-app="contractorsApp"> <div ng-controller="ContractorsCtrl"> <ul> <li ng-repeat="person in contractors">{{person.name}}</li> </ul> </div> </body> 
205
19 авг. nustatė user1336103 Rgp 19 2013-08-19 12:22 '13, 12:22, 2013-08-19 12:22
@ 11 atsakymų

Pabandykite pridėti toliau nurodytą tarpinę programą prie „NodeJS“ / „Express“ programos (pridėjau keletą komentarų jūsų patogumui):

 // Add headers app.use(function (req, res, next) { // Website you wish to allow to connect res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8888'); // Request methods you wish to allow res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); // Request headers you wish to allow res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); // Set to true if you need the website to include cookies in the requests sent // to the API (eg in case you use sessions) res.setHeader('Access-Control-Allow-Credentials', true); // Pass to next layer of middleware next(); }); 

Tikiuosi, kad tai padės!

517
19 авг. jvandemo atsakymas 19 rug . 2013-08-19 13:23 '13, 13:23, 2013-08-19 13:23

Priimtas atsakymas yra geras, jei norite kažką trumpesnio, galite naudoti „ plug.js“ galimą „plug“

Lengva naudoti, šiuo konkrečiu atveju:

border=0
 var cors = require('cors'); // use it before all route definitions app.use(cors({origin: 'http://localhost:8888'})); 
72
18 дек. Atsakymą pateikė Fabiano Soriani 18 d. 2015-12-18 03:11 '15, 3:11 2015-12-18 03:11

Kitas būdas yra tiesiog pridėti antraštes į savo maršrutą:

 router.get('/', function(req, res) { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); // If needed res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); // If needed res.setHeader('Access-Control-Allow-Credentials', true); // If needed res.send('cors problem fixed:)'); }); 
24
26 нояб. Atsakymą pateikė Asaf Hananel 26 lapkritis. 2016-11-26 19:14 '16 at 7:14 pm 2016-11-26 19:14

Geriausias atsakymas man buvo gerai, išskyrus tai, kad man reikėjo pervardyti daugiau nei vieną domeną.

Be to, aukščiausias atsakymas nukenčia dėl to, kad „ OPTIONS užklausa nėra apdorojama tarpinės programinės įrangos, ir jūs negaunate jos automatiškai.

Baltuosius allowed_origins laikydami „Express“ konfigūracijoje saugoju kaip allowed_origins , o teisingą domeną nustatykite pagal origin antraštę, nes „ Access-Control-Allow-Origin “ neleidžia nurodyti daugiau nei vieno domeno.

Štai ką baigiau:

 var _ = require('underscore'); function allowCrossDomain(req, res, next) { res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); var origin = req.headers.origin; if (_.contains(app.get('allowed_origins'), origin)) { res.setHeader('Access-Control-Allow-Origin', origin); } if (req.method === 'OPTIONS') { res.send(200); } else { next(); } } app.configure(function () { app.use(express.logger()); app.use(express.bodyParser()); app.use(allowCrossDomain); }); 
13
28 марта '14 в 20:30 2014-03-28 20:30 atsakymą pateikė Dan Abramovas kovo 28 d. 14 val. 20:30 2014-03-28 20:30

Atsakymo kodas leidžia tik „localhost“: 8888. Šis kodas negali būti naudojamas gamybai ar kitam serverio pavadinimui ir prievadui.

Jei norite, kad jis veiktų visiems šaltiniams, naudokitės:

 // Add headers app.use(function (req, res, next) { // Website you wish to allow to connect res.setHeader('Access-Control-Allow-Origin', '*'); // Request methods you wish to allow res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); // Request headers you wish to allow res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type'); // Set to true if you need the website to include cookies in the requests sent // to the API (eg in case you use sessions) res.setHeader('Access-Control-Allow-Credentials', true); // Pass to next layer of middleware next(); }); 
10
06 июля '16 в 20:31 2016-07-06 20:31 atsakymas pateikiamas Vicheanak liepos 16 d. 16:20 20:31 2016-07-06 20:31

Įdiekite „Cors“ priklausomybę nuo projekto:

 npm i --save cors 

Pridėti į serverio konfigūracijos failą:

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

Dirbu su 2.8.4 versija.

5
29 авг. atsakymas pateikiamas monikaja 29 rug . 2018-08-29 12:21 '18, 12:21 val. 2018-08-29 12:21
 app.all('*', function(req, res,next) {  var responseSettings = { "AccessControlAllowOrigin": req.headers.origin, "AccessControlAllowHeaders": "Content-Type,X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Date, X-Api-Version, X-File-Name", "AccessControlAllowMethods": "POST, GET, PUT, DELETE, OPTIONS", "AccessControlAllowCredentials": true };  res.header("Access-Control-Allow-Credentials", responseSettings.AccessControlAllowCredentials); res.header("Access-Control-Allow-Origin", responseSettings.AccessControlAllowOrigin); res.header("Access-Control-Allow-Headers", (req.headers['access-control-request-headers']) ? req.headers['access-control-request-headers'] : "x-requested-with"); res.header("Access-Control-Allow-Methods", (req.headers['access-control-request-method']) ? req.headers['access-control-request-method'] : responseSettings.AccessControlAllowMethods); if ('OPTIONS' == req.method) { res.send(200); } else { next(); } }); 
2
21 дек. Wiki atsakymas gruodžio 21 d 2015-12-21 15:51 '15 15:51 2015-12-21 15:51

Jis dirbo man.

 app.get('/', function (req, res) { res.header("Access-Control-Allow-Origin", "*"); res.send('hello world') }) 

Galite pakeisti *, kad atitiktų jūsų poreikius. Tikiuosi, kad tai padės.

2
15 дек. atsakymas dmx 15 dec. 2018-12-15 14:31 '18, 14:31 val. 2018-12-15 14:31

1
22 мая '18 в 17:55 2018-05-22 17:55 atsakymas duotas Ezhilui Arasanui gegužės 22 d. 18 val. 17:55 2018-05-22 17:55

Galite naudoti „$ http.jsonp“

Or

Toliau pateikiamas chromo darbas vietiniams bandymams.

Turite atidaryti chromą naudodami šią komandą. (Spustelėkite >

 Chrome.exe --allow-file-access-from-files 

Pastaba Jūsų chromas neturėtų būti atidarytas. Kai paleisite šią komandą, chromas bus atidarytas automatiškai.

Jei šią komandą įvedate komandų eilutėje, pasirinkite „Chrome“ diegimo katalogą, tada naudokite šią komandą.

Žemiau pateikiamas atviro chromo Mac programoje kodas, kuriame yra „--allow-file-access-from-files“

 set chromePath to POSIX path of "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" set switch to " --allow-file-access-from-files" do shell script (quoted form of chromePath)  switch  " > /dev/null 2> > 

antrasis variantas

Paprasčiausiai galite naudoti atvirą (1), jei norite pridėti vėliavų: atidarykite „Google Chrome“ --args - failų prieigą iš failų

1
19 авг. atsakymą pateikė jQuery Guru 19 rug. 2013-08-19 12:30 '13, 12:30, 2013-08-19 12:30

 If you want to set Access-Control-Allow-Origin to a specific static directory you can set the following. 
0
02 июля '16 в 9:18 2016-07-02 09:18 atsakymą pateikė Lutono Datta liepos 2 d., 16 d., 9:18 2016-07-02 09:18

Kiti klausimai apie žymes arba Ask a question