Перенаправить на корневой URL, передавая некоторые данные об ответе в узле js - PullRequest
0 голосов
/ 12 ноября 2018

перенаправить на домашний URL, передавая некоторые данные пользователя. Приведенный ниже код перенаправит на корневой URL и передаст имя пользователя через параметры URL.

 exports.successfull = (req,res) => {
      var userName = JSON.parse(req.body).username
      res.redirect("/?username="+ userName);
    }

, поэтому ожидаемый URL на стороне клиента будет https://www.example.com/?username="John%20%Doe"

другой способ

res.send({
  url: "/",
  data: {
   username: userName
  }
})

res.send не перенаправляет, вместо этого он отправит строку, что означает, что здесь, на стороне клиента, он даст "/".

но в URL не будет никаких строковых параметров.

так что без строковых параметров и использования перенаправления, как я могу достичь выше. если я использую res.send, он отправит строку, если я использую res.redirect, нам нужно добавить параметры.

я просто хочу перенаправить и передать данные без указания имени пользователя в параметрах URL

Нужно ли мне использовать сеанс, cookie-файлы или что-то еще?

1 Ответ

0 голосов
/ 13 ноября 2018

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

Вместо этого вы можете получать данные и отображать шаблон в том же запросе POST.

app.post('/getdata', function(req, res){
  res.render('/examplePage.SOMETEMPLATEENGINE', {
    data: req.body.username
  });
});

Или еще лучше, вы можете использовать экспресс-сессии или куки.Экспресс-сеансы могут быть настроены с использованием промежуточного программного обеспечения express-session и установлены следующим образом.

const session = require('express-session');

app.use(session({
    name: "my-session-name",
    secret: 'my-secret',
    resave: false,
    saveUninitialized: true,
    store: // your prefered data store,
    cookie: {
      maxAge: oneDay
    }
}));

для этого потребуется использовать data store, так как сеансы хранят все конечныеИнформация о пользователях в базе данных.Если вам нужен более простой подход, насколько я понимаю, вы новичок, вы можете реализовать данные в файле cookie, используя cookie-parser .Я рекомендую вам прочитать документы.(не волнуйтесь, это не так сложно, как может показаться)

Реализация cookie может выглядеть следующим образом, если у вас установлено промежуточное ПО cookie-parser .

app.post('/setdata', (req, res, next) => {
    // we will set a cookie here
    res.cookie('mycookie', {username: req.body.username})
   // this will set a cookie on the clients browser with whatever value you wan't
})

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

// future route the user visits
app.get('/showcookie', (req, res, next) => {
   // we can access the cookie we set if the user has visited the previous route like 
      //this
   let username = req.cookies.mycookie.username
   // and you can do with it what you wan't afterward
})

Если вам нужно супер простое экспресс-приложение, которое показывает вам рабочий примеркуки-файлов вот ссылка на GitHub репо Я написал, чтобы показать некоторым из моих друзей, как куки-файлы работают в экспрессе.Надеюсь, это поможет.Всегда лучше узнать о том, с чем вы работаете, прежде чем переходить к чему-то другому, особенно когда вы работаете с пользовательскими данными.Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...