Nodejs/express 重定向不会重定向 url

Nodejs/express redirect not going to redirect url

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

在 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;

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

如果您想将用户重定向到不同的应用程序,您需要使用该应用程序的绝对 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
});