Я создал интерфейс, используя react.js
, а сервер API - express.js
. Чтобы позаботиться о CORS, я использовал пакет cors
в качестве следующего примера:
var passport = require("passport");
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors());
app.use('/route1', passport.authenticate('jwt', {session: false}), route1)
app.use('/route2', passport.authenticate('jwt', {session: false}), route2)
app.use('/route3', passport.authenticate('jwt', {session: false}), route3)
app.use(function(req, res, next) { /* catch 404 and forward to error handler */
next(createError(404));
});
app.listen(app.get('port'), () => {
logger.info('Server started')
})
Все маршруты работают хорошо, пока не будут выполнены два последовательных запроса на один и тот же маршрут. Например:
POST example.com/route1
GET example.com/route1
Я получу ошибку No 'Access-Control-Allow-Origin' header is present on the requested resource.
в консоли браузера для запроса GET. Но если я изменю путь маршрутов, например:
POST example.com/route1
GET example.com/route1/example
, это сработает.
Оба сервера работают на apache веб-сервере. К моему внутреннему серверу обращается https, который перенаправляет его на nodejs сервер, работающий по http.
Что я делаю не так? Спасибо.
изменить: как и просили, вот фрагмент route1
const express = require('express')
const router = express.Router()
const errors = require('./error_handler');
router.post('/', async (req, res, next) => {
const result =
/* DB Middleware */
.catch((err) => errors.errorHandler(err,res))
if(!res.headersSent) /* Making this condition to check if errorHandler() already sent an error response */
res.send(result);
})
router.get('/', async (req, res, next) => {
if(req.query.course === undefined)
res.send(400);
let result =
/* DB Middleware */
.catch((err) => errors.errorHandler(err,res))
if(!res.headersSent)
res.send(result)
})
module.exports = router