【问题标题】:Nodejs/express redirect not going to redirect urlNodejs/express 重定向不会重定向 url
【发布时间】:2021-05-01 04:49:32
【问题描述】:

我在我的应用程序中使用 nodejs/express 视图引擎。这意味着当路由指向一个现有的 url 时,分配的模板将被渲染到屏幕上。每当用户输入不存在的 url 时,我之前已经实现了到主页的重定向。但是,现在,我有一个 wordpress 端点 to/stores,我正在尝试重定向到该端点,而不是我以前拥有的模板。问题是当我点击href链接时,它直接进入主页,因为这次它不是模板,而是路由。所以它不适合“视图引擎”类型的视图。请参阅下面的代码了解我的意思。谢谢!

在 app.js 中,如果存在不存在的路由,我将重定向到主页:

const express = require('express');
const path = require('path');
const router = require('./routes/index');
const morgan = require('morgan');

const ENVIRONMENT = require('./common/config').ENVIRONMENT;
const BASE_URL = require('./common/config').BASE_URL;

const app = express();

app.locals.BASE_URL = BASE_URL;

app.disable('x-powered-by');
app.use(morgan('combined'));
app.use('/', express.static(path.join(__dirname, '../public')))
app.use('/', router);

app.use(function(req, res) {
  res.redirect('/');
});

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.listen(3000, () => console.log(`listening in ${ENVIRONMENT} on port 3000!`));

然后在 index.js 文件中,我声明我的路由和将呈现的相应 html 文件。请记住,/stores 路由将是重定向。它之前呈现了一个 html 文件,但现在我希望它重定向到 wordpress 端点 /to/stores 。但是点击href后的结果是进入首页。

/* GET home page. */
router.get('/', function (req, res) {
  const agentString = req.get('User-Agent');
  const referrer = req.get('Referrer');
  if ((referrer && referrer.includes('art.vpn.twttr.com/tweet_review')) || (agentString && agentString.includes('AdsBot'))) {
    res.render('bots/honeypot');
  } else {
    res.render('home', {title: defaultTitle, description: defaultDescription});
  }
});



router.get('/reddit', function (req, res) {
  res.render('bots/honeypot');
});

router.get('/facebook', function (req, res) {
  const clientIps = req.headers['x-forwarded-for'];
  const userAgent = req.headers['user-agent'];
  if(!clientIps || userAgent.includes('facebookexternalhit')){
    res.render('bots/honeypot');
    return;
  }
  const ipMatchCidrs = areIp4sInCidrs(clientIps.split(','), BLACKLISTED_CIDRS);
  if (ipMatchCidrs) {
    res.render('bots/honeypot');
    return
  }

  const path = req.url.split('?');
  const queryString = path.length > 1 ? `?${path[1]}` : '';
  res.redirect(301, `/${queryString}`);
});

// THIS IS THE ROUTE THAT I AM TRYING TO DO THE 301 REDIRECT
router.get("/stores", (req, res) => {
  res.status(301).redirect("/to/stores")
})


router.get('/institutional', function (req, res) {
  res.render('institutional');
});

router.get('/institutional/checkout', function (req, res) {
  res.render('institutional-checkout');
});


router.get('/go/:page', function (req, res) {
  res.render('lps/' + req.params.page);
});

router.get('/api', function (req, res) {
  res.render('api');
});



module.exports = router;

【问题讨论】:

    标签: javascript node.js express redirect https-redirect


    【解决方案1】:

    您的应用似乎没有定义“/to/stores”路由,因此首先将用户重定向到该路由,然后 catch all 中间件将用户重定向到主页。

    如果您想将用户重定向到不同的应用程序,您需要使用该应用程序的绝对 URL。即 res.status(301).redirect("https://example.com/to/stores")

    如果您想在此应用程序中处理“/to/stores”路由,则需要将 /to/stores 路由处理程序添加到您的应用程序,即

    router.get("/to/stores", (req, res) => {
      //TODO: Handle /to/stores route
    });
    

    【讨论】:

    • 抱歉听起来像个菜鸟,但这是这样做的吗? app.get("/stores", (req, res) => { res.status(301).redirect("example.com/to/stores") })
    猜你喜欢
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多