我有一个基本的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
文件,所以:
管理索引路由:
- 安装基本模板引擎
npm install ejs --save
- 将其用作 Express 模板引擎
app.set('view engine', 'ejs')
- 设置 View 路径
app.set('views', path.join(__dirname, 'views'));
- 渲染
app.get('/'. (req, res) => res.render('Index', {IS_LOGGED: true });
- Index.ejs
<script>window.INITIAL_STATE = {IS_LOGGED: <%- IS_LOGGED %>}; </script>
管理登录 API:
而不是 res.write(200); ...INVALID USERNAME...
,以更一致的状态代码进行响应,以便您的客户端可以了解登录请求何时完成。
关于javascript - 将变量从 Node.js 服务器传递到静态页面脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41641414/