我正在尝试创建玉视图并使用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 spaces
,Tab
。
答案 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
文件。 这是更推荐的。
这两种解决方案在技术上都是正确的!