我正在尝试在Express中创建一个原始商店前端应用程序,我试图设置它,以便如果一个人登录,因此用户名不是“未定义”,它显示一个块,如果你是退出它显示另一个。
这是我的layout.jade
文件:
doctype 5
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
h1.main= title
body
- if (typeof(username) !== 'undefined') {
block items
-}
- else {
block content
-}
我的内容阻止内容。
extends layout
block content
#content
img#splash(src='images/ninja.png')
我的物品挡住了。
block items
#items
h1 Hello (username)
当我登录时,我只看到页面标题(我的layout.jade文件内容)而不是items.jade文件的内容。
有谁知道这是为什么?我是Express的新手,无法解决这个问题:/
如果我做的话。
- if (typeof(username) !== 'undefined') {
p test
-}
- else {
block content
-}
然后我可以在登录时看到该文字。
答案 0 :(得分:3)
您的代码是正确的,但在渲染jade文件时是否传递了username
。 jade由您的快速服务器呈现以返回请求,如果在呈现发生时执行其他代码。
如果您在显示页面后登录(设置用户名)或注销,则不会显示/更新该块。在您的应用中,您可以在呈现时传递用户名
res.render('layout', {locals:{title: 'Page title', username: "something"}});
//display block content
res.render('layout', {locals:{title: 'Page title'}});
//display block items
答案 1 :(得分:3)
使用underscore.Js为了更好地管理和映射html到Jade,最好是函数
在文件config express或connect
中 app.use(function(req, res, next){
res.locals._ = require('underscore');
next();
});
在index.jade
doctype 5
html
head
title= title
link(rel='stylesheet', href='/stylesheets/style.css')
h1.main= title
body
if _.isUndefined( username )
//- if _.isString( username ) or bla...
block items
else
block content
它好多了,你可以做有趣的事情!