Проблема со связью экспресс-узла nodejs с интерфейсом реагирования - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь собрать информационную панель реагирования и соединить ее с бэкэндом Nodejs.В настоящее время я пытаюсь проверить токен JWT.когда я делаю это с помощью приложения Почтальон, он работает нормально.но когда я пытаюсь сделать это, используя мою форму реагирования, этого не происходит.пожалуйста, помогите мне найти проблему в моем коде.Я не опытный разработчик.Я как новичок в nodejs и реагировать.Любая помощь будет высоко оценена.Я постараюсь опубликовать весь соответствующий код и некоторые снимки ниже.

//reactjs code calling this function on a button submit
 //verify user

  onVerify = event => {
    let databody = localStorage.getItem("jwtToken");
    event.preventDefault();
    console.log(databody);
    fetch("http://localhost:8000/api/auth/me", {
      method: "get",
      headers: {
        "x-access-token": databody
      }
    })
      .then(res => {
        if (res.ok) {
          return res.json();
        } else {
          throw new Error("Something went wrong with your fetch");
        }
      })
      .then(json => {
        console.log(json.token);
      });
  };

Экспресс-код внутреннего кода Nodejs

//app.js
var express = require("express");

var db = require("./db");
var Cors = require("cors");

var app = express();

app.use(Cors());

var UserController = require("./user/UserController");
app.use("/users", UserController);

var AuthController = require("./auth/AuthController");
app.use("/api/auth", AuthController);

var WorkInvenController = require("./auth/WorkInvenController");
app.use("/api/workinven", WorkInvenController);

module.exports = app;

//AuthController.js


router.get("/me", function(req, res) {
  console.log(req.headers);
  var token = req.headers["x-access-token"];
  if (!token)
    return res.status(401).send({ auth: false, message: "No token provided." });

  jwt.verify(token, process.env.secret, function(err, decoded) {
    if (err)
      return res
        .status(500)
        .send({ auth: false, message: "Failed to authenticate token." });

    User.findById(decoded.id, { password: 0 }, function(err, user) {
      if (err)
        return res.status(500).send("There was a problem finding the user.");
      if (!user) return res.status(404).send("No user found.");

      res.status(200).send(user);
    });
  });
});

вывод терминала из бэкэнда при публикации с использованием Postman

enter image description here

вывод терминала из бэкэнда при публикации с использованием responsejs от

enter image description here

ошибка браузера прилагается ниже enter image description here

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

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

Теперь после установкиистечение срока действия токена до "24h" все работает хорошо .. большое спасибо за помощь, ребята.

0 голосов
/ 27 апреля 2019

как я вижу, это "ошибка отклонения"

вы можете просто добавить .catch() и обработать выдаваемую ошибку.

onVerify = event => {
    let databody = localStorage.getItem("jwtToken");
    event.preventDefault();
    console.log(databody);
    fetch("http://localhost:8000/api/auth/me", {
      method: "get",
      headers: {
        "x-access-token": databody
      }
    })
      .then(res => {
        if (res.ok) {
          return res.json();
        } else {
          throw new Error("Something went wrong with your fetch");
        }
      })
      .then(json => {
        console.log(json.token);
      }).catch(error=>{
     //handle the error in here may be
        console.log(error)
     });
  };

когда-то мы писали что-то вродеОбертка также для обработки ошибок:

fetch(<url>, {
      <headers>,
     <options>
    })
      .then(this._checkStatus)
      .then(response => response.json());

 _checkStatus(response) {
    if (response.status >= 200 && response.status < 300) {
      // Success status lies between 200 to 300
      return response;
    }  else {
//here handle the error may be.
      var error = new Error(response.statusText);
      console.log(error);
    }
  }

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

...