Expressjs+;ejs和a标记href URL不使用子目录路由

Expressjs+;ejs和a标记href URL不使用子目录路由,express,ejs,Express,Ejs,我不太清楚这里有几件事是肯定的:) 基本应用程序结构为app.js文件格式: const express = require('express'); const port = process.env.Port || 5000; const app = express(); const path = require('path'); const mainRoute = require( path.join(__dirname, 'src/routes/mainRoute')); app.use

我不太清楚这里有几件事是肯定的:)

基本应用程序结构为app.js文件格式:

const express = require('express');
const port = process.env.Port || 5000;
const app = express();
const path = require('path');

const mainRoute = require( path.join(__dirname, 'src/routes/mainRoute'));

app.use(function (req, res, next) {
    res.header('Cache-Control', 'public, max-age=3600');
    next();
});

app.use(express.static('public', {
  maxAge: '1d',
}));

app.set('views', path.join(__dirname, 'src/views'));
app.set('view engine', 'ejs');

app.use('/', mainRoute);

app.get('*', function(req, res){
    res.status(404).send('404???')
});

app.listen( port, () => console.log(`Listening on port`, port ));
const express = require('express');
const mainRoute = express.Router();

mainRoute.get('/', async (req, res) => {
    res.render('page', {url: 'pageone', title: 'page 1'});    
});

mainRoute.get('/pageone', async (req, res) => {
    res.render('page', {url: 'pagetwo', title: 'page 2'});    
});

mainRoute.get('/pagetwo', async (req, res) => {
    res.render('page', {url: 'pageone', title: 'page 1'});    
});

module.exports = mainRoute;
以及基本结构route.js文件,如下所示:

const express = require('express');
const port = process.env.Port || 5000;
const app = express();
const path = require('path');

const mainRoute = require( path.join(__dirname, 'src/routes/mainRoute'));

app.use(function (req, res, next) {
    res.header('Cache-Control', 'public, max-age=3600');
    next();
});

app.use(express.static('public', {
  maxAge: '1d',
}));

app.set('views', path.join(__dirname, 'src/views'));
app.set('view engine', 'ejs');

app.use('/', mainRoute);

app.get('*', function(req, res){
    res.status(404).send('404???')
});

app.listen( port, () => console.log(`Listening on port`, port ));
const express = require('express');
const mainRoute = express.Router();

mainRoute.get('/', async (req, res) => {
    res.render('page', {url: 'pageone', title: 'page 1'});    
});

mainRoute.get('/pageone', async (req, res) => {
    res.render('page', {url: 'pagetwo', title: 'page 2'});    
});

mainRoute.get('/pagetwo', async (req, res) => {
    res.render('page', {url: 'pageone', title: 'page 1'});    
});

module.exports = mainRoute;
在page.ejs模板上,可以看到如下简单内容:

<a href="/<%= url %>"> 
    <%= title %> 
</a>
<hr />
 <a href="/"> 
    home 
</a>
现在,问题是当我加载URL时:

http://localhost:5000/sub
然后,页面上的链接呈现view source href=“/pageone”,因此,当我单击这些链接时,页面将转到http://localhost:5000/ 未在主路线上保留“/sub”集

例如,在angular2中,我可以保留所有链接,并尊重在索引上设置了基本url标记的子文件夹

但在expressjs上似乎并非如此

如何保持页面上指向/sub或/loc路径的所有链接?不渲染或将其添加到ejs模板

我的意思是,有与路由目录相关的链接吗?

您可以使用它来获取安装路由器的路径。您可以将其传递到
页面.ejs
查看并构建URL

// mainRoute.js

mainRoute.get('/', async (req, res) => {
  res.render('page', { url: 'pageone', title: 'page 1', baseUrl: req.baseUrl })
})

mainRoute.get('/pageone', async (req, res) => {
  res.render('page', { url: 'pagetwo', title: 'page 2', baseUrl: req.baseUrl })
})

mainRoute.get('/pagetwo', async (req, res) => {
  res.render('page', { url: 'pageone', title: 'page 1', baseUrl: req.baseUrl })
})



你好,阿伦。您是否可以就以下简单问题咨询Node.js:。请让我知道,当你阅读此,这样我可以删除评论。谢谢