Ошибка XMLHttpRequest при обновлении документа, но CORS должен быть включен - PullRequest
0 голосов
/ 19 ноября 2018

Когда я пытаюсь обновить запись, я получаю следующие ошибки CORS:

Cross origin requests are only supported for HTTP.

XMLHttpRequest cannot load localhost:3000/api/adverts/5bf2b76c38c88dd144e5d4c3 due to access control checks.

В create.component.ts:

onSaveAdvert(form: NgForm){
    if (form.invalid) {
        console.log("fail");
        return;
    }
    console.log(form.value.title);
    this.advertService.updateAdvert(this.id, form.value.title, form.value.content, form.value.make, form.value.model, form.value.color, form.value.price, form.value.milage, form.value.doors, form.value.year, null);
    console.log("succes");
    form.resetForm();
}

Функция обновления в advert.service.ts:

updateAdvert(id: string, title: string, content: string, make: string, model: string, color: string, price: number, milage: number, doors: number, year: number, addedOn: any){
    const advert: Advert = {_id: id, title: title, content: content, make: make, model: model, color: color, price: price, milage: milage, doors: doors, year: year, addedOn: null};
    this.http.put("localhost:3000/api/adverts/" + id, advert)
        .subscribe(response => console.log(response));
}

Экспресс конечная точка в app.js:

app.put("/api/adverts/:id", (req, res, next)=>{
    const advert = new Advert({
        _id: req.body.id,
        title: req.body.title,
        content: req.body.content,
        make: req.body.make,
        model: req.body.model,
        color: req.body.color,
        price: req.body.price,
        milage: req.body.milage,
        doors: req.body.doors,
        year: req.body.year
    })
    Advert.updateOne({_id: req.params.id}, advert).then(result => {
        console.log(result);
        res.status(200).json({message: "succesful"});
    });
});

Установка заголовков в app.js:

app.use((req, res, next) => {

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

Кажется, это проблема CORS, но я могу ПОЛУЧИТЬ, ПОСТАВИТЬ и УДАЛИТЬ записи в базе данных, но обновление выдает эти ошибки.

UPDATE: Я заменил:

this.http.put("localhost:3000/api/adverts/" + id, advert)

С:

this.http.put(`${this.uri}/api/adverts/${id}`, advert)

в updateAdvert () в advert.service.ts.

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

1 Ответ

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

Вы можете использовать библиотеку js cors node (https://www.npmjs.com/package/cors):

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

Добавить Cors к обработчикам:

app.get('/products/:id', cors(), function (req, res, next) {
    res.json({msg: 'This is CORS-enabled'})
});
...