我想将mongodb的数据通过session输出到html中,但是每当我从新输入url的时候浏览器只返回session的Json,请问有什么更好的方法么?
发布于 5 年前 作者 aiboli 3229 次浏览 来自 问答

我想做一个登陆界面,用户登陆后会显示他的姓名信息和余额,在login’界面的时候post之后显示home 的页面的时候是正常的,但是我在home 的页面的时候 在浏览器输入 当时的url的时候 结果会只返回一个json,我想要的是页面不变 谢谢各位老师赐教!

这是我route的代码: router.post(’/home’, function(req, res) { var query = { username: req.body.username, password: req.body.password }; user.findOne({ ‘username’: query.username, ‘password’ : query.password}, function (err, user){
if(user){ console.log(query.username + ": 登陆成功 " + new Date()); req.session.user = user.username; req.session.firstname = user.firstname; req.session.lastname = user.lastname; userAcc.findOne({‘username’: query.username}, function(err, info){ console.log(“this function is read”); if(info) { req.session.credit = info.credit; res.render(‘home’); }else { console.log(query.username + ": 登陆失败 " + new Date()); res.redirect(’/’); } }); }else{ console.log(query.username + ": 登陆失败 " + new Date()); res.redirect(’/’); } }); }); router.get(’/home’, function(req, res){ if (req.session && req.session.user) { // Check if session exists // lookup the user in the DB by pulling their email from the session console.log(“here we get the session!!”); // expose the user to the template res.locals.user = req.session.user; res.send(req.session); } else { res.redirect(’/’); } }); module.exports = router;

这是我 html的代码: <script> $(document).ready(function(){ $.get("/home", function(data, status){ if(status == ‘success’) { $("#username").html(“Mr " + data.lastname); $(”#useremail").html(data.user); $("#credits").html("" + data.credit); }else { alert(“something wrong!!!”); } }); }); </script>

7 回复

这里可以不用前端js res.send(req.session); 改成 res.render('你的home view',{data: req.session}) 这样在你的前端页面里 直接 data.user , data.credit 等等就能取到你session里的所有数据

@imhered 您好,我的前端用的是html 代替 ejs 或者 jade。 您的意思是在<script></script>里直接调用 data 这个变量么? 但是我试了什么都没有得到

@imhered 谢谢您

可以在 router.get(’/home’, (req, res) => {}) 里用 res.json() 跟 res.html() 提供不同的响应。

假如你前端页面 叫 home.html

router.get('/home') 这个地方最后是 res.render('home',{data: req.session})

那你前端的html 只需这样:

<div id="username"><%= data.lastname %></div>

如果非要用前端js,那么就用个click事件什么的去触发你的 get home 这个请求。

@imhered 谢谢你,我发现我没有用ejs去渲染,初始化之后,用你的方法就奏效了 :)

@IchiNiNiIchi 谢谢你,请问一下,为什么我在浏览器输入然后敲回车这个页面 比如说 localhost:3000/home 得到的只是浏览器输出的json 而非 home.html这个页面呢?

回到顶部