javascript - 将值传递给 EJS 文件
问题描述
我正在尝试将 POST 路由中的值传递给 EJS 文件并显示它。我尝试过重定向、发送和渲染结果,但它不会传递给 EJS 文件。
这是我的 login.js 的 POST:
router.post('/', (req, res) => {
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("tmai");
dbo.collection('users').findOne({username: req.body.user, password: req.body.pass}, function (err, result) {
if (err) console.log(err);
if (result === null) res.send('null');
else {
res.send({user: result.username});
// res.redirect('/login');
// res.render('login/login', {user:req.body.user});
}
db.close();
});
});
});
这是我的主页的 GET,我试图为用户获取价值。在上面的 POST 发送请求之后,我仍然得到未定义的用户:
router.get('/', (req, res) => {
console.log(req);
res.render('home/home', {user: req.body.user});
});
如果有帮助,请提供我的文件夹结构的图片。
解决方案
这是我的主页的 GET,我试图为用户获取价值。在上面的 POST 发送请求之后,我仍然得到未定义的用户:
听起来你需要一些会话。
当用户当前使用您的应用程序时,会话可帮助您的应用程序保存/记住用户数据,例如登录后。
在您验证登录时的用户信息后,您可以在会话存储中存储有关该用户的一些凭据(用户名/ID),以便可以在该用户的请求中访问它,如下所示。
const express = require('express');
const session = require('express-session');
const app = express();
//- Apply & configure a session middleware
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}))
//- Usage in routes
router.post('/', (req, res) => {
//- Db user lookup code to get result.username
//- Save username in session
req.session.username = result.username;
//- Then goes your rendering & redirects code
});
从这里您将能够参考username
我们在用户访问的其他路线上的会话中的值;
router.get('/', (req, res) => {
console.log(req.session.username);
res.render('home/home', {user: req.session.username});
});
GitHub:快速会话
推荐阅读
- docker - 下面这个例子中 docker 多阶段构建的优势是什么(为什么要这样做?)
- sql - SQL - 按两个匹配的列和一个不同的列过滤
- sql - 将评论行加入单行
- apache-spark - EMR Hudi 无法创建 hive 连接 jdbc:hive2://localhost:10000/
- c - Linux在c中捕获复制粘贴事件
- javascript - 如何优化总阻塞时间高的 vue
- azure-cosmosdb-sqlapi - 使用 Bicep 将多个存储过程部署到 Cosmos
- python - 在 S3 Bucket 中,将一个文件夹中的大量文件移动到多个文件夹中
- javascript - 如何编写一个处理对象的 forEachRight 函数?
- r - 如何使用ggplot按组在奇数比的x轴上创建相等的中断?