Nodejs Microblog的Jade页面代码
Nodejs Microblog的Jade页面代码
发现Nodejs这个比较新鲜的东西,一时鸡血,找这个教程学了下。比较蛋疼的是Express3默认支持Jade模板。好吧,学了写下,其实还挺不错的一种写法,跟少按了很多Shift,各种缩进,跟写Python 似的。把教程里的代码都转过来了。实际运行有个问题未能解决,到了/u/username 的时候,CSS加载不进来,求高手解决,其他页面运行正常。
index.jade
extends layout
block content
- if(!user){
div.hero-unit
h1 欢迎来到 Microblog
p Microblog 是一个基于 Node.js 的微博系统。
p
a.btn.btn-primary.btn-large(href='/login') 登录
a.btn.btn-large(href='/reg') 立即注册
- } else{
include say
- }
include posts
posts.jade
- posts.forEach(function(post,index){
- if(index%3==0){
div.row
- }
div.span4
h2
a(href='/u/'+ post.user)= post.user
|说
p
small= post.time
p= post.post
- })
- if(posts.length % 3 != 0)
div.row
login.jade
extends layout
block content
form.form-horizontal(method='post')
fieldset
legend 用户登入
div.control-group
label.control-label(for='username') 用户名
div.controls
input.input-xlarge(type='text',id='username',name='username')
div.control-group
label.control-label(for='password') 口令
div.controls
input.input-xlarge(type='password',id='password',name='password')
div.form-actions
button.btn.btn-primary(type='submit') 登入
layout.jade
!!! transitional
html(xmlns='http://www.w3.org/1999/xhtml')
script(src='javascript/jquery.js')
script(src='javascript/bootstrap.js')
head
meta(http-equiv='Content-Type', content='text/html; charset=utf-8')
title= title
link(rel='stylesheet',type='text/css', href='stylesheets/bootstrap.css')
style
body{padding-left:10px;padding-right:10px;padding-top:10px;padding-bottom:10px;}
link(rel='stylesheet',type='text/css', href='stylesheets/bootstrap-responsive.css')
body
div.navbar.nvarbar-fixed-top
div.navbar-inner
div.container
a.btn.btn-navbar(data-toggle='collapse',data-target='.nav-collapse')
span.icon-bar
span.icon-bar
span.icon-bar
a.brand(href='/') Microblog
div.nav-collapse
ul.nav
li(class='active')
a(href='/') 首页
- if(!user){
ul.nav
li
a(href='login') 登入
li
a(href='/reg') 注册
- } else{
ul.nav
li
a(href='/logout') 登出
- }
div#container.container
- if(success){
div.alert.alert-success
= success
- }
- if(error){
div.alert.alert-error
= error
- }
block content
hr
footer
p
a(href='http://www.byvoid.com') BYVoid
|2012
reg.jade
extends layout
block content
form.form-horizontal(method='post')
fieldset
legend 用户注册
div.control-group
label.control-label(for='username') 用户名
div.controls
input.input-xlarge(type='text',id='username',name='username')
p.help-block 你的帐户名称,用于登录和显示。
div.control-group
label.control-label(for='password') 口令
div.controls
input.input-xlarge(type='password',id='password',name='password')
div.control-group
label.control-label(for='password-repeat') 重复输入口令
div.controls
input.input-xlarge(type='password',id='password-repeat',name='password-repeat')
div.form-actions
button.btn.btn-primary(type='submit') 注册
say.jade
form.well.form-inline.center(method='post',action='/post',style='test-align:center;')
input.span8(name='post',type='text')
button.btn.btn-success(type='submit')
i.icon-comment.icon-white 发言
user.jade
extends layout
block content
- if(user){
include say
- }
include posts
根据您提供的标题和内容,这里展示了Node.js微博客应用中的各个Jade(现在称为Pug)页面模板文件。这些文件定义了应用的前端视图,并且包含了从布局到具体页面的各种结构。
index.jade
这是主页模板,它会根据用户是否已登录来决定显示什么内容:
extends layout
block content
- if(!user){
div.hero-unit
h1 欢迎来到 Microblog
p Microblog 是一个基于 Node.js 的微博系统。
p
a.btn.btn-primary.btn-large(href='/login') 登录
a.btn.btn-large(href='/reg') 立即注册
- } else{
include say
- }
include posts
posts.jade
该文件负责渲染用户的微博内容:
- posts.forEach(function(post,index){
- if(index%3==0){
div.row
- }
div.span4
h2
a(href='/u/'+ post.user)= post.user
|说
p
small= post.time
p= post.post
- })
- if(posts.length % 3 != 0)
div.row
login.jade
登录表单模板:
extends layout
block content
form.form-horizontal(method='post')
fieldset
legend 用户登入
div.control-group
label.control-label(for='username') 用户名
div.controls
input.input-xlarge(type='text',id='username',name='username')
div.control-group
label.control-label(for='password') 口令
div.controls
input.input-xlarge(type='password',id='password',name='password')
div.form-actions
button.btn.btn-primary(type='submit') 登入
layout.jade
这是一个通用布局模板,包含导航栏、头部、底部等公共部分:
!!! transitional
html(xmlns='http://www.w3.org/1999/xhtml')
script(src='javascript/jquery.js')
script(src='javascript/bootstrap.js')
head
meta(http-equiv='Content-Type', content='text/html; charset=utf-8')
title= title
link(rel='stylesheet',type='text/css', href='stylesheets/bootstrap.css')
style
body{padding-left:10px;padding-right:10px;padding-top:10px;padding-bottom:10px;}
link(rel='stylesheet',type='text/css', href='stylesheets/bootstrap-responsive.css')
body
div.navbar.nvarbar-fixed-top
div.navbar-inner
div.container
a.btn.btn-navbar(data-toggle='collapse',data-target='.nav-collapse')
span.icon-bar
span.icon-bar
span.icon-bar
a.brand(href='/') Microblog
div.nav-collapse
ul.nav
li(class='active')
a(href='/') 首页
- if(!user){
ul.nav
li
a(href='login') 登入
li
a(href='/reg') 注册
- } else{
ul.nav
li
a(href='/logout') 登出
- }
div#container.container
- if(success){
div.alert.alert-success
= success
- }
- if(error){
div.alert.alert-error
= error
- }
block content
hr
footer
p
a(href='http://www.byvoid.com') BYVoid
|2012
reg.jade
用户注册表单模板:
extends layout
block content
form.form-horizontal(method='post')
fieldset
legend 用户注册
div.control-group
label.control-label(for='username') 用户名
div.controls
input.input-xlarge(type='text',id='username',name='username')
p.help-block 你的帐户名称,用于登录和显示。
div.control-group
label.control-label(for='password') 口令
div.controls
input.input-xlarge(type='password',id='password',name='password')
div.control-group
label.control-label(for='password-repeat') 重复输入口令
div.controls
input.input-xlarge(type='password',id='password-repeat',name='password-repeat')
div.form-actions
button.btn.btn-primary(type='submit') 注册
say.jade
用户发表微博的表单模板:
form.well.form-inline.center(method='post',action='/post',style='test-align:center;')
input.span8(name='post',type='text')
button.btn.btn-success(type='submit')
i.icon-comment.icon-white 发言
user.jade
用户个人页面模板,类似于首页,但只包含用户的发言:
extends layout
block content
- if(user){
include say
- }
include posts
关于CSS加载问题,可能是由于相对路径错误或静态文件服务配置不当。确保javascript
和stylesheets
目录下的文件能被正确访问。可以检查Express的静态文件服务配置,例如:
app.use(express.static(path.join(__dirname, 'public')));
这样设置后,将javascript
和stylesheets
目录放在项目根目录下的public
文件夹中即可。
木有人啊,附上作者BYVoid 的Microblog的源代码https://github.com/BYVoid/microblog,有兴趣可以去看下。
正解,非常感谢!
嗯嗯,好的,我会试着写下,感谢!
这页面真着真舒服,最好把独立出去
根据你提供的代码片段,问题似乎在于 /u/username
页面中的 CSS 文件没有正确加载。这可能是由于静态文件路径配置错误导致的。下面是一些可能的解决方案和优化建议:
解决方案
-
检查路径配置: 确保在 Express 中正确配置了静态文件路径。例如,在应用启动时添加以下代码:
app.use(express.static(path.join(__dirname, 'public')));
这样可以确保
public/stylesheets
目录下的 CSS 文件可以通过/stylesheets/
路径访问。 -
检查 HTML 链接: 确保
layout.jade
文件中的 CSS 链接路径正确。你现有的代码看起来是正确的:link(rel='stylesheet', type='text/css', href='stylesheets/bootstrap.css') link(rel='stylesheet', type='text/css', href='stylesheets/bootstrap-responsive.css')
如果 CSS 文件仍然无法加载,请尝试使用绝对路径:
link(rel='stylesheet', type='text/css', href='/stylesheets/bootstrap.css') link(rel='stylesheet', type='text/css', href='/stylesheets/bootstrap-responsive.css')
示例代码
以下是经过调整的 layout.jade
文件,以确保静态文件路径正确:
!!!
html(xmlns='http://www.w3.org/1999/xhtml')
script(src='/javascript/jquery.js')
script(src='/javascript/bootstrap.js')
head
meta(http-equiv='Content-Type', content='text/html; charset=utf-8')
title= title
link(rel='stylesheet', type='text/css', href='/stylesheets/bootstrap.css')
link(rel='stylesheet', type='text/css', href='/stylesheets/bootstrap-responsive.css')
style
body{padding-left:10px;padding-right:10px;padding-top:10px;padding-bottom:10px;}
body
div.navbar.nvarbar-fixed-top
div.navbar-inner
div.container
a.btn.btn-navbar(data-toggle='collapse', data-target='.nav-collapse')
span.icon-bar
span.icon-bar
span.icon-bar
a.brand(href='/') Microblog
div.nav-collapse
ul.nav
li(class='active')
a(href='/') 首页
- if(!user){
ul.nav
li
a(href='/login') 登入
li
a(href='/reg') 注册
- else{
ul.nav
li
a(href='/logout') 登出
-}
div#container.container
- if(success){
div.alert.alert-success
= success
- }
- if(error){
div.alert.alert-error
= error
- }
block content
hr
footer
p
a(href='http://www.byvoid.com') BYVoid
|2012
总结
通过检查并确保静态文件路径正确配置,并调整 layout.jade
文件中的 CSS 链接路径,你应该能够解决 CSS 加载问题。如果问题依然存在,请检查浏览器开发者工具中的网络请求,确认是否存在 404 错误或其他异常。