Ответ имеет HTTP-код состояния 400 + Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. - СРЕДНИЙ СТЕК - PullRequest
0 голосов
/ 09 мая 2018

Мне нужно передать строку на узел и следующий ответ в консоли браузера:

Не удалось загрузить http://localhost:3003/api/buscarCep: Нет Заголовок «Access-Control-Allow-Origin» присутствует в запрошенном ресурс. Происхождение 'http://localhost:4000' поэтому не допускается доступ. Ответ имеет HTTP-код состояния 400.

Я использую MEAN-стек с Angular 1.

Мой серверный узел:

const port = 3003

const bodyParser = require('body-parser')
const express = require('express')
const server = express()
const allowCors = require('./cors')
const queryParser = require('express-query-int')

server.use(bodyParser.urlencoded({ extended: true }))
server.use(bodyParser.json())
server.use(allowCors)
server.use(queryParser())

server.listen(port, function() {
  console.log(`BACKEND is running on port ${port}.`)
}) 

module.exports = server

Сервер является узлом и находится на той же машине, которую я тестирую. Так что все локально. Политики CORS для моего сервера:

module.exports = function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE')
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization')
  next()
}

Фабрика в угловой:

(function () {
    angular.module('primeiraApp').factory('apiExterna', [
        '$http',
        'consts',
        ApiExterna
    ])

    function ApiExterna($http, consts) {

        function buscarCep(cep) {
            $http.post(`http://localhost:3003/api/buscarCep`, cep)
                .then(resp => {  
                    console.log(resp)          
                    return null
                }).catch(function (resp) {
                    console.log("erro")
                })
        }

        return { buscarCep }
    }
})()

Параметр CEP получен от контроллера. Пока все хорошо, проблема возникает с этого момента:

Маршруты в бэкэнде:

const express = require('express')
const auth = require('./auth')

module.exports = function(server) {

  /*
   * Rotas protegidas por JWT
   */
  const protectedApi = express.Router()
  server.use('/api', protectedApi)

  protectedApi.use(auth)

  // rotas da API

  const alertasService = require('../api/alertas/alertasService')
  alertasService.register(protectedApi, '/alertas')

  const ApiService = require('../api/apiExterna/apiService')
  protectedApi.post('/buscarCep', ApiService.buscarCep)

«auth» - это модуль для аутентификации приложения.

Здесь я должен получить CEP:

const _ = require('lodash')
const fetch = require('node-fetch')

const buscarCep = (req, res, next) => {
    const cep = req.body.cep
}

module.exports = { buscarCep }

Самым странным является то, что, например, все на этом "сигнальном" маршруте работает, но в этом посте его нет. Я делаю это неправильно?

1 Ответ

0 голосов
/ 09 мая 2018

Вы можете использовать библиотеку cpm npm, что намного проще cors-npm

вам не нужно использовать Express-Cors

const allowCors = require('./cors')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...