我想做一个登陆界面,用户登陆后会显示他的姓名信息和余额,在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>
这里可以不用前端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这个页面呢?