我在我的应用程序中使用nodejs/express视图引擎。这意味着当路由指向现有的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;发布于 2021-05-01 13:02:28
您的应用程序似乎没有定义“/ to /store”路由,因此用户首先被重定向到该路由,然后catch all中间件将用户重定向到主页。
如果要将用户重定向到不同应用程序,则需要使用该应用程序的绝对url。即res.status(301).redirect(“https://example.com/to/stores"”)
如果你想在这个应用程序中处理“/ to /store”路由,你需要在你的应用程序中添加/ to /store路由处理程序,即
router.get("/to/stores", (req, res) => {
//TODO: Handle /to/stores route
});https://stackoverflow.com/questions/67342983
复制相似问题