首页 > 解决方案 > 将值传递给 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});
});

如果有帮助,请提供我的文件夹结构的图片。

如果有帮助,请提供我的文件夹结构的图片。

标签: javascriptnode.jsexpressejs

解决方案


这是我的主页的 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:快速会话


推荐阅读