J'ai un projet angulaire 6, qui a un service avec pointe sur un server.js
Angular is on port: 4200 and Server.js is on port: 3000.
Lorsque je pointe le service sur http://localhost:3000/api/posts
(emplacement Server.js), j'obtiens cette erreur:
Failed to load http://localhost:3000/api/posts: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.
Voici le code server.js:
// Get dependencies
const express = require('express');
const path = require('path');
const http = require('http');
const bodyParser = require('body-parser');
// Get our API routes
const api = require('./server/routes/api');
const app = express();
// Parsers for POST data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// Point static path to dist
app.use(express.static(path.join(__dirname, 'dist')));
// Set our api routes
app.use('/api', api);
// Catch all other routes and return the index file
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist/myproject/index.html'));
});
/**
* Get port from environment and store in Express.
*/
const port = process.env.PORT || '3000';
app.set('port', port);
/**
* Create HTTP server.
*/
const server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port, () => console.log(`API running on localhost:${port}`));
Ma question est:
Comment obtenir server.js pour autoriser cet appel?
If you are using Express, you can try this cors package.
EDIT:
var express = require('express')
var cors = require('cors')
var app = express()
app.use(cors())
app.get('/products/:id', function (req, res, next) {
res.json({msg: 'This is CORS-enabled for all origins!'})
})
app.listen(80, function () {
console.log('CORS-enabled web server listening on port 80')
})
Génial! vous devez activer le domaine CORS qui peut faire des demandes! Vous pouvez essayer cela
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
"Access-Control-Allow-Origin", "*" -> used to accept all domains
Ou vous pouvez simplement définir localhost:4200
ou quelque chose comme ça
Essayez ça et dites moi si ça marche! Merci! J'espère que cela t'aides!
Puisque vous utilisez Express, vous pouvez créer un middleware et l’utiliser pour rediriger tous vos points finaux. Voici un extrait de travail de la même chose:
....
app.use((req,res,next) => {
res.header("Access-Control-Allow-Origin","*");
res.header("Access-Control-Allow-Methods", "POST, GET");
res.header("Access-Control-Allow-Header","Origin, X-Requested-With, Content-Type, Accept");
next();
})
...
Placez-le avant de définir vos itinéraires et vous devriez être bon.
Consultez: https://github.com/ronnielivingsince1994/phoenix/blob/master/messageboard/backend/server.js pour comprendre l'utilisation des middlewares dans les points de terminaison du routage à l'aide de express.js.