Angular: http post request - проблема: "not found", даже если конечная точка API установлена - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь сделать пост-запрос, где я включаю токен JWT в заголовок. Моя проблема в том, что при выполнении запроса я получаю сообщение об ошибке:

ERROR HttpErrorResponse {headers: HttpHeaders, status: 404, statusText: "Not Found", url: "http://localhost:4200/api/asdf", ok: false, …}

Мой запрос выглядит так:

    const httpOptions = {
      headers: new HttpHeaders({
        'authorization': 'Bearer ' + localStorage.getItem('token')
      })
    };

    await this.http.post<any>(
      '/api/asdf', 
      httpOptions
    )
    .subscribe(data => {
      this.usersFromBackEnd = data,
      console.log(data)
    });

Соответствующая конечная точка api:

app.get('/api/asdf', function(req, res){
    middleware.checkToken(req, res, next);
    handlers.index(req, res);
    console.log('asdf');
  });

Мой метод handlers.index ():

  index (req, res) {
    res.json({
      success: true,
      message: 'Index page'
    });
  }

Мой метод middleware.checktoken ():

let checkToken = (req, res, next) => {
  let token = req.headers['x-access-token'] || req.headers['authorization']; // Express headers are auto converted to lowercase

  if (token) {
    if (token.startsWith('Bearer ')) {
      // Remove Bearer from string
      token = token.slice(7, token.length);
    }

    jwt.verify(token, config.secret, (err, decoded) => {
      if (err) {
        return res.json({
          success: false,
          message: 'Token is not valid'
        });
      } else {
        req.decoded = decoded;
        next();
      }
    });
  } else {
    return res.json({
      success: false,
      message: 'Auth token is not supplied'
    });
  }

Примечание: фрагмент URL: /api/asdf просто заполнитель и будет заменен позже.

Не могли бы вы помочь понять, почему я получаю эту ошибку и как я могу ее исправить?

Заранее большое спасибо! С наилучшими пожеланиями, Сэмюэль

РЕДАКТИРОВАТЬ: сообщение об ошибке содержит localhost: 4200, однако я думаю, что localhost: 3000 должен быть вызван, как это установлено в моем файле proxy.conf. json:

{
    "/api/*": {
      "target": "http://localhost:3000",
      "secure": false,
      "logLevel": "debug",
      "changeOrigin": true
    }
}

Также терминал в журналах VSCode:

[HPM] POST /api/asdf -> http://localhost:3000

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

...