【问题标题】:Routing on the server messes up routing on the client side?服务器上的路由弄乱了客户端的路由?
【发布时间】:2014-05-04 03:55:51
【问题描述】:

使用 passport.js 在用户登录之前我不需要任何客户端 javascript。

在我的服务器端,我有一个处理一些登录逻辑的路由器。所以当用户成功登录后,我将用户路由到/profile路由。

这让我很困惑,因为 express 正在处理整个框架。 /profile 路由渲染了我的配置文件模板res.render('profile', { user : req.user }); 并很好地将用户的服务器模型传递到模板中,很酷的东西!

但这就是让我着迷的原因,如果我的应用程序现在位于 /profile 上,我的目录中不存在一个路径,而我在这里定义了我的目录 app.use('/', express.static(path.join(__dirname, 'public')));,这会导致架构错误。

因为有时我的 js css 会出现 404 错误。我必须在我的客户端骨干路由器上像这样/routes#chat 路由。

我的问题

那么在用户成功后以某种方式重定向回localhost:3000 并现在销毁登录视图并呈现用户配置文件视图是否是个好主意?有人可以告诉我如何进行这样的路由吗?我有一个大概的想法,但当我认为服务器端需要与客户端进行通信时,我不太确定该怎么做?

如果以上是一个坏主意,有人可以给我建议如何更好地看待这个吗?

编辑:路线

app.get('/', function(req, res) {
    res.render('index'); 
});

app.get('/login', function(req, res) {
    res.render('login', { message: req.flash('loginMessage') }); 
});

app.get('/profile', isLoggedIn, function(req, res) {
    res.render('profile', { user : req.user });
    res.redirect('/');
    io.sockets.on('connection', function (socket) {
        socket.userName = req.user.local.email;
        users[socket.userName] = socket;
        console.log(Object.keys(users))
    });
});

【问题讨论】:

  • 基础/服务器路由先检查isLogin,如果真渲染profile,假渲染/直接到/login。登录后重定向到/
  • 是的,我试过了,所以我让用户保存在会话中。但是当重定向到/ 时,我如何将用户属性传递给模板。如果我重定向到/,它将使用包含两个按钮的 index.handlebars,登录或注册。
  • 我的意思是你的 index.handlerbar 需要是个人资料页面。你当前的索引变成 login.handlerbar。
  • 哦,有道理我没有那样想。谢谢,让我试着改变一下。
  • 好的,我明白你在说什么。我的问题是,如果我设置了默认路由,那么每当我返回该路由时,它都会运行初始路由。因此,通过路由回/,它会运行任何设置。

标签: javascript node.js backbone.js express


【解决方案1】:

使用 session 记住登录或使用一些自定义函数来查询登录状态。

app.get('/', function(req, res) {

    if (req.session.isLogin) {
        res.render('profile', { user : req.user });
        // put other code here
    }
    else
        res.redirect('/login'); 
});

app.get('/login', function(req, res) {
    res.render('login', { message: req.flash('loginMessage') }); 
});

【讨论】:

  • 哦,太好了,我是路由和所有这些东西的新手。我很欣赏这个例子。很高兴你回应我正在摆弄我的理智:)
  • 我的路由中间件看起来像这样function isLoggedIn(req, res, next) { if (req.isAuthenticated()) return next(); res.redirect('/'); }req.session.isLoggedIn 似乎返回未定义?
  • 所以由于我使用的是passport.js,看来我需要使用req.user 它可以工作,不确定它是否安全?但是stackoverflow.com/questions/18739725/…
  • if (req.user) 一个好的解决方案,而不是 if (req.session.isLogin) 声音关闭和生病肯定会给你一个绿色检查。感谢您的洞察力....
  • 您是否使用 passport.js 进行身份验证?或者我从任何其他问题中弄错了。
猜你喜欢
  • 2018-02-05
  • 2014-07-21
  • 2015-04-17
  • 2021-10-25
  • 1970-01-01
  • 2016-12-31
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多