无法使用快递加载玉视图

时间:2014-03-07 16:19:43

标签: javascript node.js express pug

我正在尝试创建玉视图并使用express加载它。路径/正确加载,但当我加载helloworld时,浏览器会显示Cannot get /helloworld

我创建了以下视图并将其保存到视图中:

extend layout

block content
    h1=title
    p Hello! Hello World! Welcome to #{title}

routes/index.js我这样做了:

exports.helloworld=function(req,res){
res.render('helloworld',{title:'Hello World!'});
};

app.js文件中:

app.get('/helloworld',routes.helloworld);

更新:

完整的app.js文件:

/**
 * Module dependencies.
 */

var express = require('express')
   ,routes = require('./routes')

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
  app.use(express.session({ secret: 'your secret here' }));
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
 app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
 app.use(express.errorHandler());
});

// Routes
app.get('/', routes.index);
app.get('/helloworld',routes.helloworld);
app.listen(3000, function(){
 console.log("Express server listening on port %d in %s mode", app.address().port,     app.settings.env);
 });

我的routes.js

exports.index = function(req, res){
 res.render('index', { title: 'Express' })
};

exports.helloworld=function(req,res){
res.render('helloworld',{title:'Hello World!'});
};

layout.jade没有block content,将其添加到layout.jade而不是body!=body会导致此错误:

    Error: /home/anr/Desktop/node js/withdb/views/layout.jade:7
5|     link(rel='stylesheet', href='/stylesheets/style.css')
6|   body
  

7 | #内容       8 |阻止内容

 Invalid indentation, you can use tabs or spaces but not both
 at Object.Lexer.indent (/home/anr/Desktop/node  
 js/withdb/node_modules/jade/lib/lexer.js:762:15)
 at Object.Lexer.next (/home/anr/Desktop/node  
 js/withdb/node_modules/jade/lib/lexer.js:870:15)
 at Object.Lexer.lookahead (/home/anr/Desktop/node 
 js/withdb/node_modules/jade/lib/lexer.js:114:46)
 at Parser.lookahead (/home/anr/Desktop/node 
 js/withdb/node_modules/jade/lib/parser.js:100:23)
at Parser.peek (/home/anr/Desktop/node js/withdb/node_modules/jade/lib/parser.js:77:17)
at Parser.tag (/home/anr/Desktop/node js/withdb/node_modules/jade/lib/parser.js:733:22)
at Parser.parseTag (/home/anr/Desktop/node js/withdb/node_modules/jade/lib/parser.js:719:17)
at Parser.parseExpr (/home/anr/Desktop/node js/withdb/node_modules/jade/lib/parser.js:188:21)
at Parser.block (/home/anr/Desktop/node js/withdb/node_modules/jade/lib/parser.js:689:25)
at Parser.tag (/home/anr/Desktop/node js/withdb/node_modules/jade/lib/parser.js:806:26)

因此,使用空格缩进会导致空页面加载。这是我当前的layout.jade

 doctype html
 html
  head
   title= title
   link(rel='stylesheet', href='/stylesheets/style.css')
  body
   block content

Sublime Text缩进four spacesTab

3 个答案:

答案 0 :(得分:1)

如评论中所述,  extend layout应为extends layout

仅供参考,如果您有权访问服务器日志,则应该在开发环境中显示。

答案 1 :(得分:0)

我知道这个问题在8个月内没有得到解答,但对于那些仍在寻求帮助的人来说,我认为问题在于:

res.render('helloworld',{title:'Hello World!'});

应阅读

res.render('index',{title:'Hello World!'});

因为后面会使用索引路由器。

祝你好运!

答案 2 :(得分:0)

/routes/index.js中更改此内容:

exports.helloworld=function(req,res){
  res.render('helloworld',{title:'Hello World!'});
};

到此:

exports.helloworld=function(req,res){
  res.render('index',{title:'Hello World!'});
};

会像魅力一样工作!

或者其他......

在views文件夹中创建一个helloworld.jade文件。 这是更推荐的。

这两种解决方案在技术上都是正确的!