Отказано в соединении при доступе к Node.js API из Angular - PullRequest
0 голосов
/ 14 марта 2020

Я новичок в Angular и пытаюсь внедрить аутентификацию пользователя на моей Angular веб-странице. В качестве бэкэнда я использую Node.js Express framework, а для аутентификации я использую аттестат.

Когда я получаю доступ к URL-адресу сервера из браузера, он работает нормально, но когда я вызываю API из Angular с тем же URL-адресом, я получаю сообщение об ошибке соединения 404.

[Ошибка ] Не удалось загрузить ресурс: сервер ответил со статусом 404 (Не найдено) (пользователи, строка 0)

Это мой URL, который работает в браузере, но не в Angular (я используйте https): https://192.168.1.103: 8000 / users

Так выглядит мой Angular API:

get_user() {
    return this.http.post(environment.apiUrl + 'users', {
      observe: 'body',
      withCredentials: true,
      headers: new HttpHeaders().append('Content-Type', 'application/json')
    });
  }

Мой API на сервере Node выглядит так :

router.get('/users', isValidUser, function (req, res, next) {
  return res.status(200).json(req.user)
});

function isValidUser (req, res, next) {
  if(req.isAuthenticated()) next ();
  else
    return res.status(401).json({message: 'Unauthorized request'});

}

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

[Error] ERROR
HttpErrorResponse

error: "<!DOCTYPE html><html><head><title></title><link rel=\"stylesheet\" href=\"/stylesheets/style.css\"></head><body><h1>No…"

headers: HttpHeaders {normalizedNames: Map, lazyUpdate: null, lazyInit: function}

message: "Http failure response for https://192.168.1.103:8000/users: 404 Not Found"

name: "HttpErrorResponse"

ok: false

status: 404

statusText: "Not Found"

url: "https://192.168.1.103:8000/users"

Prototyp HttpErrorResponse
    defaultErrorLogger (vendor.js:43427)
    handleError (vendor.js:43479)
    next (vendor.js:74051)
    (anonymná funkcia) (vendor.js:69627)
    __tryOrUnsub (vendor.js:115680)
    next (vendor.js:115619)
    _next (vendor.js:115567)
    next (vendor.js:115544)
    next (vendor.js:115330)
    emit (vendor.js:69589)
    run (polyfills.js:3359)
    onHandleError (vendor.js:73335)
    runTask (polyfills.js:3406)
    invokeTask (polyfills.js:3700)
    timer (polyfills.js:5885)

1 Ответ

2 голосов
/ 14 марта 2020

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

Попробуйте

get_user() {
return this.http.post(environment.apiUrl + 'users', {
  observe: 'body',
  withCredentials: true
});

}

Также вам не нужно устанавливать заголовок Content-Type, поскольку он автоматически устанавливается angular HttpClient

...