将变量从Node.js服务器传递到静态页面脚本

时间:2017-01-13 18:44:32

标签: javascript node.js express

我有一个基本的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以避免回调地狱)。感谢。

3 个答案:

答案 0 :(得分:1)

一种好方法是使用Template Engine而不是提供纯.html文件,因此:

管理索引路径:

  1. 安装基本模板引擎npm install ejs --save
  2. 将其用作快速模板引擎app.set('view engine', 'ejs')
  3. 设置观看路径app.set('views', path.join(__dirname, 'views'));
  4. 渲染app.get('/'. (req, res) => res.render('Index', {IS_LOGGED: true });
  5. Index.ejs <script>window.INITIAL_STATE = {IS_LOGGED: <%- IS_LOGGED %>}; </script>
  6. 管理Login API:

    而不是res.write(200); ...INVALID USERNAME...,使用更一致的状态代码进行响应,以便客户端可以了解登录请求何时完成。

    app.get('/login', (req, res) => res.status(401).end());

答案 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>