как пройти через параметры с помощью инструкции get / fetch (express) - PullRequest
2 голосов
/ 27 января 2020

Я пытаюсь создать стандартную страницу профиля для пользователя при входе. Я пытаюсь пройти через переменную (электронная почта). Я совершенно не понимаю, как передать эту переменную в маршрут express, поскольку это необходимо сделать через маршрут get, поскольку он возвращает данные.

Это то, что у меня есть.

, где используется выборка.

Как вы видите, я пытаюсь отправить переменную электронную почту через здесь.

 getItems() {
    try {
      const email = window.localStorage.getItem("User");
      const data = { email };
      fetch("/profile-account-details", email)
        .then(recordset => recordset.json())
        .then(results => {
          this.setState({ AccountDetails: results.recordset });
        });
    } catch (e) {
      console.log(e);
    }
  }

Маршрут этой выборки через мой сервер. js файл. Мне просто нужно использовать это с хранимой процедурой. Все, что мне действительно нужно, это чтобы переменная была доступна здесь.


app.get("/profile-account-details", function(req, res) {
  // connect to your database
  sql.connect(config, function(err) {
    if (err) console.log(err);

    // create Request object
    var request = new sql.Request();

    // query to the database and get the records
    request.execute("dbo.ProfileAccountDetails", function(err, recordset) {
      if (err) console.log(err);
      // send records as a response
      res.json(recordset);
    });
  });
});

Все, что я просто хочу сделать, - это пройти через переменную из функции get items и использовать ее в моем маршруте. Я чувствую, что это очень простой ответ на то, что я пропускаю.

Любая помощь очень ценится

Ответы [ 3 ]

2 голосов
/ 27 января 2020

Другие ответы рекомендуют использовать GET с параметром запроса. Но вы, вероятно, не хотите показывать это письмо в URI.

В зависимости от вашего варианта использования - это небезопасно и позволяет MiTM читать электронную почту ваших клиентов.

Вы можете использовать req.body для отправки конфиденциальных данных в запросе POST.

fetch('/profile-account-details', { method: 'POST', body: JSON.stringify({ email }) });

Затем в вашем express маршруте.

  1. Измените на app.post
app.post("/profile-account-details", function(req, res) {

});
Чтение req.body
const { email }  = JSON.parse(req.body) // can't remember if you need to use JSON.parse
1 голос
/ 27 января 2020

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

 getItems() {
try {
  const email = window.localStorage.getItem("User");
  const data = { email };
  fetch("/profile-account-details/" + email)
    .then(recordset => recordset.json())
    .then(results => {
      this.setState({ AccountDetails: results.recordset });
    });
} catch (e) {
  console.log(e);
}
}

это может быть доступ на вашем сервере следующим образом :::

app.get("/profile-account-details/:email", function(req, res) {
// Get the email from the url params
 let email=req.params.email
 sql.connect(config, function(err) {
if (err) console.log(err);

// create Request object
var request = new sql.Request();

// query to the database and get the records
request.execute("dbo.ProfileAccountDetails", function(err, recordset) {
  if (err) console.log(err);
  // send records as a response
  res.json(recordset);
});
});
});

Вы можете дать ему любое имя в вашем серверный код. имя, которое вы указали после «:» в маршруте, - это имя, которое будет доступно в вашем Api. В вашем случае это электронная почта. то есть "/ profile-account-details /: email"

1 голос
/ 27 января 2020

Если это API get, я думаю, вы можете добавить параметр запроса в вашем клиенте

 getItems() {
    try {
      const email = window.localStorage.getItem("User");
      const data = { email };
      //I'm adding query params here
      fetch(`/profile-account-details?email=${email}`)
        .then(recordset => recordset.json())
        .then(results => {
          this.setState({ AccountDetails: results.recordset });
        });
    } catch (e) {
      console.log(e);
    }
  }

И в коде вашего сервера

app.get("/profile-account-details", function(req, res) {
  // Get the email from the query params
  let email=req.query.email
  sql.connect(config, function(err) {
    if (err) console.log(err);

    // create Request object
    var request = new sql.Request();

    // query to the database and get the records
    request.execute("dbo.ProfileAccountDetails", function(err, recordset) {
      if (err) console.log(err);
      // send records as a response
      res.json(recordset);
    });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...