Node JS + Express-使用数据提供静态文件

时间:2018-11-10 15:53:06

标签: javascript node.js

我不是服务器端渲染的忠实拥护者,也就是说,我不喜欢使用模板引擎等。我宁愿让客户端控制显示,而服务器只提供静态文件和数据。

我将主网页设计为单页应用程序。第一次加载时,会向用户显示一个登录表单,其他所有内容都被隐藏。如果他们成功登录,它将隐藏登录并显示应用程序的其余部分。现在,我已经实现了cookie,因此它们只需要登录一次。麻烦的是,我无法想到让客户在显示登录表单之前就知道已登录的方法。

当客户请求/时,我会这样做:

router.get('/', function (req, res, next) {
        if(req.cookies.token){
            app.locals.userManager.loginUserWithToken(req.cookies.token, req.ip, req.headers['user-agent'])
        }
        res.sendFile(path.join(__dirname + './../public/index.html'));
    });

我该如何告诉浏览器用户已登录并且不需要显示登录表单?我可以随同发送某种预数据吗?我想不是因为我只是发送文件。

2 个答案:

答案 0 :(得分:1)

您可以在响应中包含第二个cookie,SPA中的代码可用于确定是否显示登录名。

答案 1 :(得分:1)

使用静态文件而不是像react这样的框架来开发SPA有点困难。

使用bcrypt模块对用户ID进行哈希处理。用户登录后,将其发送到前端并将其保存在本地存储中。 在页面加载时检查本地存储。为了获得更安全的应用程序,您可以在页面加载时向服务器发送ajax请求,并检查哈希ID以进行验证。

p.s。该解决方案有点混乱并且不安全,因为您会将所有数据作为静态页面发送给用户。如果您真的很喜欢服务器端渲染,则可以选中next.js