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

7 回复

根据您提供的标题和内容,这里展示了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加载问题,可能是由于相对路径错误或静态文件服务配置不当。确保javascriptstylesheets目录下的文件能被正确访问。可以检查Express的静态文件服务配置,例如:

app.use(express.static(path.join(__dirname, 'public')));

这样设置后,将javascriptstylesheets目录放在项目根目录下的public文件夹中即可。


木有人啊,附上作者BYVoid 的Microblog的源代码https://github.com/BYVoid/microblog,有兴趣可以去看下。

正解,非常感谢!

嗯嗯,好的,我会试着写下,感谢!

顶一下楼主,也正在学习!楼主可以再把完善一下。

这页面真着真舒服,最好把独立出去

根据你提供的代码片段,问题似乎在于 /u/username 页面中的 CSS 文件没有正确加载。这可能是由于静态文件路径配置错误导致的。下面是一些可能的解决方案和优化建议:

解决方案

  1. 检查路径配置: 确保在 Express 中正确配置了静态文件路径。例如,在应用启动时添加以下代码:

    app.use(express.static(path.join(__dirname, 'public')));
    

    这样可以确保 public/stylesheets 目录下的 CSS 文件可以通过 /stylesheets/ 路径访问。

  2. 检查 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 错误或其他异常。

回到顶部