Как отправить данные между двумя методами приложения в express. js - PullRequest
1 голос
/ 25 марта 2020

Допустим, у меня есть приложение. js file:

const express = require("express");
const bodyParser = require("body-parser");

const app = express();
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));

app.get("/login", (req, res) => {
    res.render("login");
});

//From the login.ejs file, a form submitted the values 'email' and 'password'
app.post("/login", (req, res) => {
    const email = req.body.email;
    const password = req.body.password;
    res.redirect("/page")
});

app.get("/page", (req, res) => {
    //Now, here I want to use the email and password from the app.post /login
});

Вот исходный код проекта, над которым я сейчас работаю. (Если это поможет)

Исходный код немного запутан и содержит ошибки (из-за этой проблемы), но в любом случае, здесь это

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Вы можете передавать данные между маршрутами с помощью query string или session.

С сеансом:
Запустите приведенную ниже команду для установки сеанса lib.

$> npm i --save express-session


Вам необходимо выполнить следующие шаги:

  1. Создать уникальный id для каждого запроса пользователя. (Вы можете использовать Date (). GetTime ()).
  2. Добавить этот уникальный id в строку запроса.
  3. Создать новый ключ с этим id в объекте сеанса.
  4. Назначьте имя пользователя и пароль для вновь созданного сеансового ключа. Благодаря этому вы сможете безопасно получить email и пароль каждого пользователя
  5. In page route, получить id из строки запроса и затем извлечь данные из сеанса с этим id без конфликт.

код:

const express = require("express");
const bodyParser = require("body-parser");
const session = require('express-session'); // add the session lib
const app = express();
// Session secret key
app.use(session({
    'secret': '343ji43j4n3jn4jk3n'
  }))
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));
app.get("/login", (req, res) => {
    res.render("login");
});
//From the login.ejs file, a form submitted the values 'email' and 'password'
app.post("/login", (req, res) => {
    const email = req.body.email;
    const password = req.body.password;
    let id = new Date().getTime();
    req.session[id] = { email, password};   
    res.redirect(`/page?id=${id}`)
});
app.get("/page", (req, res) => {
    let id = req.query.id;
    let email = req.session[id].email;
    let password = req.session[id].password
    //Now, here I want to use the email and password from the app.post /login
});

Пример строки запроса:

Не рекомендуется добавьте пароль в строку запроса.

const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));
app.get("/login", (req, res) => {
    res.render("login");
});
//From the login.ejs file, a form submitted the values 'email' and 'password'
app.post("/login", (req, res) => {
    const email = req.body.email;
    const password = req.body.password;
    res.redirect(`/page?email=${email}&password=${password}`)
});
app.get("/page", (req, res) => {
    let email = req.query.email;
    let password = req.query.password
    //Now, here I want to use the email and password from the app.post /login
});
0 голосов
/ 25 марта 2020

К сожалению, это невозможно, пока вы не сможете безопасно распознать, что это тот же человек, который делает второй звонок. res.redirect работает так: инструктирует браузер сделать второй вызов, и поскольку все обработчики запросов независимы друг от друга, контекст теряется. Для этой демонстрационной цели вы можете просто использовать сеансы .

...