【问题标题】:Root Route Not Redirecting in ExpressExpress 中的根路由不重定向
【发布时间】:2018-06-10 07:31:43
【问题描述】:

我的问题完全源于“/”路线。我认为这被称为根路径。当用户连接到我的站点时,我会检查该用户是否有会话数据,以便他/她在浏览器关闭时不必总是重新登录。如果用户没有会话数据,那么我的网站将被重定向到注册路由器。

假设我的网站是 www.example.com。如果我去 www.example.com/buy 并且我没有关于用户的任何会话数据,则网站会按预期自动重定向到 www.example.com/signup。如果我输入 www.example.com/sell 并且不存在会话数据,也会发生同样的情况。但是,如果我只输入 www.example.com 并且仍然没有会话数据,则 url 不会被重定向到 www.example.com/signup。

为什么要对根路由进行这种“特殊”处理,如何使其遵循与其他路由相同的行为?

我认为与问题有关的来自我的server.js 的代码 sn-p:

app.get('/session', (req, res) => {
  res.send(req.session.auth);
})
.get('/signup', (req, res) => {
  if (!req.session.auth) {
    res.sendFile(path.join(__dirname, 'client/public/index.html'));
  } else {
    return res.redirect('/');
  }
})
.get('*', (req, res) => {
  if (req.session.auth) {
    res.sendFile(path.join(__dirname, 'client/public/index.html'));
  } else {
    return res.redirect('/signup');
  }
}); 

server.js 的完整页面

const express = require('express'),
  app = express(),
  bodyParser = require('body-parser'),
  path = require('path'),
  initDatabase = require('./db/dbConfig'),
  port = process.env.PORT || 9000,
  io = require('socket.io').listen(app.listen(port, () => {
    initDatabase();
    console.log('Successfully connected to port ', port);
  })),
  session = require('express-session'),
  MySQLStore = require('express-mysql-session')(session),
  sessionStore = new MySQLStore({
    host: require('./actualKeys').host,
    port: 3306,
    user: require('./actualKeys').username,
    password: require('./actualKeys').password,
    database: require('./actualKeys').database,
    checkExpirationInterval: 60000,
    expiration: 43200000,
  }),
  users = {},
  rooms = {};

// express

app.use(express.static('client/build'))
.use(bodyParser.urlencoded({
  extended: true,
}))
.use(bodyParser.json())
.use(session({
  secret: require('./actualKeys').sessionCode,
  store: sessionStore,
  resave: false,
  saveUninitialized: true,
}));

require('./server/routers/router')(app);

app.get('/session', (req, res) => {
  res.send(req.session.auth);
})
.get('/signup', (req, res) => {
  if (!req.session.auth) {
    res.sendFile(path.join(__dirname, 'client/public/index.html'));
  } else {
    return res.redirect('/');
  }
})
.get('*', (req, res) => {
  if (req.session.auth) {
    res.sendFile(path.join(__dirname, 'client/public/index.html'));
  } else {
    return res.redirect('/signup');
  }
}); 

谢谢

【问题讨论】:

    标签: node.js express url routes url-redirection


    【解决方案1】:

    希望这将帮助其他有类似问题的人。我能够从较早的帖子中找到我的答案。我必须将具有 false 值的 index 属性添加到 express.static。

    express.static handling root url request

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-23
      • 2018-10-22
      • 2021-09-09
      • 1970-01-01
      • 2020-02-13
      • 2021-11-08
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多