如何在 express.js 中的两个应用程序方法之间发送数据
How do I send data between two app methods in express.js
假设我有一个 app.js 文件:
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
});
这是我目前正在做的一个项目的源代码。 (如果有帮助的话)
源码有点乱,有错误(因为这个问题),但不管怎样,here it is
您可以使用 query string
或 session
在路由之间传递数据。
有会话:
运行 下面的命令安装会话库。
$> npm i --save express-session
您需要按照以下步骤操作。
- 为每个用户请求创建唯一的
id
。 (您可以使用 Date().getTime())。
- 在查询字符串中添加这个唯一的
id
。
- 在会话对象中使用此
id
创建一个新密钥。
- 将用户名和密码分配给新创建的会话密钥。有了这个,您将能够安全地获得每个用户
email
和密码
- 在
page
路由中,从查询字符串中获取 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
});
查询字符串示例:
Not recommended to add the password in the query string.
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
});
遗憾的是,在您能够安全地识别出是同一个人拨打第二个电话之前,这是不可能的。
res.redirect
的工作方式是指示浏览器进行第二次调用,并且由于所有请求处理程序彼此独立,因此上下文丢失了。出于此演示目的,您可能只使用 sessions.
假设我有一个 app.js 文件:
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
});
这是我目前正在做的一个项目的源代码。 (如果有帮助的话)
源码有点乱,有错误(因为这个问题),但不管怎样,here it is
您可以使用 query string
或 session
在路由之间传递数据。
有会话:
运行 下面的命令安装会话库。
$> npm i --save express-session
您需要按照以下步骤操作。
- 为每个用户请求创建唯一的
id
。 (您可以使用 Date().getTime())。 - 在查询字符串中添加这个唯一的
id
。 - 在会话对象中使用此
id
创建一个新密钥。 - 将用户名和密码分配给新创建的会话密钥。有了这个,您将能够安全地获得每个用户
email
和密码 - 在
page
路由中,从查询字符串中获取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
});
查询字符串示例:
Not recommended to add the password in the query string.
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
});
遗憾的是,在您能够安全地识别出是同一个人拨打第二个电话之前,这是不可能的。
res.redirect
的工作方式是指示浏览器进行第二次调用,并且由于所有请求处理程序彼此独立,因此上下文丢失了。出于此演示目的,您可能只使用 sessions.