首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs/express重定向不会重定向url

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

Stack Overflow用户
提问于 2021-05-01 12:49:33
回答 1查看 95关注 0票数 0

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

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

代码语言:javascript
复制
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后的结果将转到主页。

代码语言:javascript
复制
/* 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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-01 13:02:28

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

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

如果你想在这个应用程序中处理“/ to /store”路由,你需要在你的应用程序中添加/ to /store路由处理程序,即

代码语言:javascript
复制
router.get("/to/stores", (req, res) => {
  //TODO: Handle /to/stores route
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67342983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档