angular get запрос не отправляет запрос на сервер, а пытается открыть страницу, почему?

177
10 октября 2019, 14:30
    getHTTP(url) {
    console.log('Sended');
    return new Promise((resolve, reject) => {
      this.http.get(url, {headers: httpOptions.headers, responseType: 'text'})
      .subscribe((data) => {
        console.log(data);
        resolve(data);
      }, (error) => {
        reject(error);
        console.log("Error", error);
      });
    });
  }

Эта конструкция должна по логике отправлять запрос на сервер, в компоненте вызываю этот метод:

    async getLeadList() {
    await this.myHttp.getHTTP('/getLeadList');
  }

На сервере ловлю запрос, и проверяю дошло ли обычным консол логом(Node.js),

router.get('/getLeadList', function(req, res) {
    console.log(req.body);
    db.Lead.find({}).then(function(leads) {
        console.log(leads);
        res.status(200).send(leads);
    });
});

По итогу он не отправляет запрос на сервер, а пытается открыть передаваемый URL (http://localhost:4200/getLeadList).

HttpResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "http://localhost:3000/getLeadList", ok: true, …}

Почему он не отправляет запрос на сервер?

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

app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, '/dist/cleanupCRM/index.html'));
}); 

Если ее убрать, то запрос доходит до сервера, но при обновлении страниц (при нажатии f5) он будет выдавать ошибку

Cannot GET /someurl

на любой странице.

Как найти в этом компромисс?

Answer 1

Я решил проблему, спасибо всем и моему потраченному времени (15 часов).

Проблема заключается в следующем. Не нужно вставлять заголовки для отправки get запроса, тк это добавляет в ответ ненужные строки кода, которые после нужно обрабатывать. У меня был обработчик любого get запроса на моем nodejs

app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, '/dist/cleanupCRM/index.html'));
});

, который стоял до основного, который должен был обработать мой get(/getLeadList)

router.get('/getLeadList', function(req, res) {
    console.log('Дошло');
    db.Lead.find({}).then(function(leads) {
        console.log(leads);
        res.send(leads);
    });
});

app.use('/', router);

Последовательность была такая:

app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, '/dist/cleanupCRM/index.html'));
});
app.use('/', router);

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

app.use('/', router);
app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, '/dist/cleanupCRM/index.html'));
});
READ ALSO
Для чего в расширении файла есть дополнительные символы?

Для чего в расширении файла есть дополнительные символы?

Увидел на сайте подключённые стили с названием site_globalcss@crc=91730608, такая же история с файлами js

151
Webpack точки выхода

Webpack точки выхода

Возможно ли сделать так чтобы у webpack точки входа совпадали с точками выхода без сторонних инструментов? Допустим у меня есть несколько файлов:

127
Расчет доставки

Расчет доставки

подскажите,как реализовать такой расчет доставки на сайте?

114