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

标签 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 请求/将其放入 header 中?或者我的方法有什么缺陷吗?抱歉,如果这是显而易见的。我对 Node 非常陌生(还需要学习 async.js/promises 以避免回调 hell )。谢谢。

最佳答案

一个好的方法是使用 Template Engine而不是提供纯粹的.html文件,所以:

管理索引路由:

  1. 安装基本模板引擎 npm install ejs --save
  2. 将其用作 Express 模板引擎 app.set('view engine', 'ejs')
  3. 设置 View 路径 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>

管理登录 API:

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

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

关于javascript - 将变量从 Node.js 服务器传递到静态页面脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41641414/

相关文章:

javascript - 递归 onchange 事件未触发

node.js - req.params 不是函数

node.js - Express.js 大 header 大小 400 错误请求

node.js - Nodejs Express 服务器不响应 HTTP POST : OpenShift

javascript - Firebase .on ('value' ) 不工作

javascript - 是否可以在服务器端使用前端 JS 框架和 Node.JS 来创建用于内容交付的 Web 服务?

node.js - sequelize 模型、迁移文件和外键。哪个是对的?

javascript - Express js 路由器不工作

javascript - D3 : gauge chart with growing arc

javascript - NodeJS,我可以在客户端看到请求负载中的数据,但在服务器端看不到请求对象中的数据