【问题标题】:Links not working in multipage site with node.js and ejs使用 node.js 和 ejs 的多页站点中的链接不起作用
【发布时间】:2016-06-13 18:34:55
【问题描述】:

我在使用 node.js/ejs 中的多页网站时遇到问题。我认为这是一个路线问题,但我相信我的路线设置正确。我的索引页面呈现正常,但是当我尝试点击页面上的链接时,我收到“Cannot GET /”错误。

我的相关前端代码:

<nav id="main_nav">
<a class="button_horizontal" href="index.ejs">HOME</a>      
<a class="button_horizontal" href="about.ejs">ABOUT</a>
<a class="button_horizontal" href="portfolio.ejs">PORTFOLIO</a>
<a class="button_horizontal" href="events.ejs">EVENTS</a>
</nav>

我的相关node.js代码:

app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(favicon(path.join(__dirname, 'public/images', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.set('view options', __dirname + '/views/pages/layout');
app.set('images', __dirname + '/public/images');
app.use('/', routes);
app.use('/users', users);

// Create server
var server = http.createServer(app).listen(4000,function(){
    console.log("We have started our server on port 4000");
});

// Load website
app.get('/', function(req, res) {
    res.render('index', { });
});

还有我的文件结构:

views/
    index.ejs
    about.ejs
    portfolio.ejs
    events.ejs
public/
    css/
    images/
    js/
routes/
    index.js
    users.js

如果有人能发现我遗漏的内容,我将不胜感激,因为我似乎找不到任何使用超过一页的网站教程!

【问题讨论】:

  • 我认为&lt;a&gt; 标签存在问题。 href 中不应该有 .ejs 扩展名,因为我们不是直接渲染 .ejs 文件,nodejs 必须根据路由进行渲染。因此,您需要提及 '/' 或 '/about' 。

标签: javascript node.js express ejs


【解决方案1】:

它不起作用,因为在 &lt;a class="button_horizontal" href="index.ejs"&gt;HOME&lt;/a&gt; 中,您指向的是 index.ejs 页面,而不是 node.js 应用程序的任何路由。

相反,你应该有

<a class="button_horizontal" href="/">HOME</a>      
<a class="button_horizontal" href="/about">ABOUT</a>
<a class="button_horizontal" href="/portfolio">PORTFOLIO</a>
<a class="button_horizontal" href="/events">EVENTS</a>

app.js

app.get('/', function(req, res) {
   res.render('index', { });
});
app.get('/about', function(req, res) {
   res.render('about', { });
});
app.get('/portfolio', function(req, res) {
   res.render('portfolio', { });
});
app.get('/events', function(req, res) {
   res.render('events', { });
});

如果您有任何疑问,请告诉我。

【讨论】:

  • 您可能还需要从链接中删除 ejs 扩展名。不过不确定。 (编辑:就像你一样,抱歉太快了)
  • 我不是删了吗?
  • 我应该在几个小时前读到这个。谢谢@MukeshSharma
猜你喜欢
  • 2019-02-07
  • 1970-01-01
  • 2017-09-26
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
相关资源
最近更新 更多