Что приводит к сбою моего запроса POST (CORS с Express / Angular)? - PullRequest
0 голосов
/ 17 ноября 2018

На данный момент я чувствую, что перепробовал все, что мог придумать, и что обыскали.

CORS Not Succeeding, FireFox Quantum Console

"чистый"версия моего кода выглядит следующим образом:

Server.js - Express

const express = require('express'),
    path = require('path'),
    bodyParser = require('body-parser'),
    cors = require('cors'),
    mongoose = require('mongoose'),
    config = require('./DB');
    businessRoute = require('../routes/business.route');


mongoose.Promise = global.Promise;
mongoose.connect(config.DB, { useNewUrlParser: true}).then(
    () => { console.log('Database is connected') },
    err => { console.log('Can not connect to the database'+ err) }
);

const app = express();
app.use(bodyParser.json());
app.use(cors());
businessRoute.all('*', cors());
app.use('/business', businessRoute);


let port = process.env.PORT || 4000;

const server = app.listen(function(){
    console.log('Listening on port ' + port);
});

business.route.js - Express, concat.

const express = require('express');
const app = express();
const businessRoutes = express.Router();

// Require Business model in our routes module
let Business = require('../models/Business');


// Defined store route
businessRoutes.route('/add').post(function(req, res) {
    let business = new Business(req.body);
    business.save()
        .then(business => {
            res.status(200).json({'business': 'business added successfully'});
        })
        .catch(err => {
            res.status(400).send("Unable to save to database");
        });
});

business.server.ts - угловой

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class BusinessService {
  uri = 'http://localhost:4000/business';

  constructor(private http: HttpClient) { }

  addBusiness(person_name, business_name, business_gst_number): void {
    const obj = {
      person_name: person_name,
      business_name: business_name,
      business_gst_number: business_gst_number
    };
    console.log(obj);
    this.http.post(`${this.uri}/add`, obj).subscribe(
      res => console.log('Done')
    );
  }
}

Что было проверено

Имеюпопытался использовать следующий код, который был рекомендован на многих сайтах, включая SO:

app.use(function(req, res, next) {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader('Access-Control-Allow-Methods', 'POST,GET,OPTIONS,PUT,DELETE');
  res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});

Я попытался удалить модуль cors для кода, используя это решение в качестве замены.Я использовал код в экспресс-роутере.Я так использовал оба модуля и код в соединении и в server.js и в роутере, а также (и что еще в коде) businessRoute.all('*', cors());

Я что-то упустил, ядолжен быть.Любая помощь приветствуется.

В соответствии с просьбой, вот информация о сетевом инспекторе из Chrome:

Chrome Network Inspector

И это действительно дало мнеОшибка ОПЦИИ:

Options Failure

Ответы [ 3 ]

0 голосов
/ 17 ноября 2018

Попробуйте удалить const app = express(); из ваших business.route.js и businessRoute.all('*', cors()); из вашего server.js

Я бы использовал app.use(cors()) раньше всех остальных

0 голосов
/ 17 ноября 2018

Я нашел проблему, благодаря Дэвиду.Проблема была в:

const server = app.listen(port, function(){
    console.log('Listening on port ' + port);
});

Мне не хватало port в app.listen().

Спасибо всем, кто помог.Я склонен удалить вопрос, так как он вообще не имеет отношения к CORS, но я получил предупреждение об удалении вопросов.

Запрос сообщества

Изменение вопроса на что-то вроде "Почему Express отказывает в моих запросах API?"будет более точным вопросом, но сделайте ранее опубликованные ответы неактуальными.Кроме того, ответ Эбина является уникальным для всех ответов, которые я видел о проблеме CORS, и считаю, что это может помочь другим.

По этим причинам я оставляю это на усмотрение сообщества и как онирассмотрите вопрос о том, чтобы остаться, и если у них есть какие-либо предложения по его улучшению, чтобы сделать его стоящим.

0 голосов
/ 17 ноября 2018

У меня была такая же ошибка, тогда я использовал это

app.use((req,res,next)=>{
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    if(req.method ==='OPTION'){
        res.header("Access-Control-Allow-Methods", 'GET,POST,PUT,DELETE,PATCH');
        return res.status(200).json({});
    }
    next();
});

, затем это сработало, попробуйте это

...