我有一个基本的node.js应用程序,它提供包含JS应用程序的静态index.html。我有一个登录路由,用于验证针对我的mongo数据库的用户名/密码,并重定向到' /':
app.post('/login', function(req,res) {
let inputUser=req.body.username;
let inputPwd=req.body.password;
findUser({'username':inputUser},function(data){
if ((data[0].srnm===inputUser)&&(data[0].psswd===inputPwd))
{
res.redirect('/');
}
else
{
res.writeHead(200);
res.write(`INVALID USERNAME OR PASSWORD TRY AGAIN OR GO AWAY`);
res.end();
}
});
});
我的index.html包含一个script.src JS应用程序。
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname+'/index.html'));
});
我想在此脚本中访问IS_LOGGED_IN标志。
如何传递脚本此信息?我需要做一个AJAX请求/在重定向之前把它放在标题中吗?或者我的方法有点不妥?对不起,如果这是明显的。我对节点很新(并且还需要学习async.js / promises以避免回调地狱)。感谢。
答案 0 :(得分:1)
一种好方法是使用Template Engine
而不是提供纯.html
文件,因此:
npm install ejs --save
app.set('view engine', 'ejs')
app.set('views', path.join(__dirname, 'views'));
app.get('/'. (req, res) => res.render('Index', {IS_LOGGED: true });
<script>window.INITIAL_STATE = {IS_LOGGED: <%- IS_LOGGED %>}; </script>
而不是res.write(200); ...INVALID USERNAME...
,使用更一致的状态代码进行响应,以便客户端可以了解登录请求何时完成。
答案 1 :(得分:0)
您可以使用Ajax脚本然后传递JSON响应
res.send({IS_LOGGED_IN: true})
或使用快速闪存模块(https://www.npmjs.com/package/express-flash)
将您的旗帜作为闪存会话示例
req.flash('IS_LOGGED_IN', true);
在html页面上渲染你的旗帜:
app.get(function(req, res, next){
return res.render('index.html', {
IS_LOGGED_IN: req.flash('IS_LOGGED_IN'),
});
});
答案 2 :(得分:0)
如果您要做的就是向您的页面脚本指出用户已登录,最简单的方法是在登录脚本中设置cookie。
res.cookie('loggedIn', 'true')
然后从您的脚本中访问它。
<script type="text/javascript">
function setCookie(key, value) {
var expires = new Date();
expires.setTime(expires.getTime() + (1 * 24 * 60 * 60 * 1000));
document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();
}
function getCookie(key) {
var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
return keyValue ? keyValue[2] : null;
}
if (getCookie('loggedIn')) {
document.write('User is logged in')
}
</script>