对Nodejs+Express+Mongoose的应用很感兴趣,主要的文件用Coffescript来实现
刚刚开始学习Nodejs,逐步添加了Express和Mongoose模块,作为一个练习作业,比较粗糙。 基本功能就是可以添加记录到数据库并读取。
app.coffee代码如下
require "coffee-script"
# 调用数据库模块
mongodb = require "./mongoapp.coffee"
# 调用http、express和path模块
http = require 'http'
path = require 'path'
# 生成express应用
express = require 'express'
app = express()
app.configure(->
# 设置端口
app.set('port', process.env.PORT || 3000)
# 设置视图和公共目录
app.set('views', __dirname + '/views')
app.use(express.static(path.join(__dirname, 'public')))
# 设置视图渲染模板为jade
app.set('view engine', 'jade')
app.use(express.favicon())
app.use(express.logger('dev'))
# 设置查询体解析为json功能
app.use(express.bodyParser())
# 设置http方法重写,如使用put更改数据等
app.use(express.methodOverride())
# 设置路由功能
app.use(app.router)
)
app.get '/', (req, res) ->
res.send "Hello World!"
# 从数据库获取数据集合
blogs = mongodb.findAll()
# 设置列表路由
app.get('/blogs',(req, res)->
res.render('blogs',{title:'Blogs',blog:blogs})
)
# 设置新建路由
app.get('/newblog', (req, res)->
res.render('newblog',{title:'Input New Blog'})
)
app.post('/newblog', (req, res)->
newblog = mongodb.create(req.body.post)
console.log newblog
# 将新的博客放入blogs数组
# blogs.push newblog
res.redirect('blogs')
)
# 设置统一化路由
app.all('/blog/:id/:op?', (req, res, next)->
# req.blog=
blogFound = mongodb.findById(req.params.id)
req.blog = blogFound
next()
)
# 分路由
app.get('/blog/:id', (req, res)->
res.render('blogs',{
title:'Select Blog ',
blog:req.blog}
)
)
app.get('/blog/:id/edit', (req, res)->
res.send('editing ' + req.blog)
)
app.put('/blog/:id', (req, res)->
res.send('updating ' + req.blog)
)
app.get('*', (req, res)->
res.send('what???', 404)
)
# 启动服务器
port = process.env.PORT or 3000
http.createServer(app).listen(app.get('port'), ->
console.log("Express server listening on port " + app.get('port'))
)
mongodb.coffee文件是数据库的接口
mongoose = require('mongoose')
# 确定数据库的初始化设置
# 连接blogs集合
mongoose.connect('localhost', 'blogs')
# 定义数据结构
BlogId = mongoose.Schema.ObjectId
BlogSchema = mongoose.Schema({
owner: BlogId,
name: String,
age: String,
work: String,
email: String,
title:String,
content:String,
date:Date
})
# 生成表模型,可作为类使用
Blog = mongoose.model('Blog', BlogSchema)
# 具体方法和函数
create=(param)->
# 创建对象
aBlog = new Blog(param)
aBlog.save((err)->
console.log "Hello! " + aBlog.name
)
aBlog
module.exports.create = create
# 查找
findAll =(condition)->
Blog.find(condition,(err,docs)->
for doc in docs
console.log doc
)
module.exports.findAll = findAll
findById =(condition)->
Blog.findById(condition,(err,doc)->
console.log "Found " + doc
)
module.exports.findById = findById
主要的代码就是上面的两个文件,然后选择适当的视图渲染模板并设计几个页面测试即可
比如输入新数据的页面很简单(采用jade模板)
extends layout
block content
//向post网页发送申请
form(method='post',action='/newblog')
input(type='text',id='',value='Name',name='post[name]')
input(type='text',id='',value='Age',name='post[age]')
input(type='text',id='',value='Work',name='post[work]')
input(type='text',id='',value='Email',name='post[email]')
input(type='text',id='',value='Title',name='post[title]')
input(type='textarea',id='post_content',value='Content',name='post[content]')
input(type='text',id='',value=Date.now(),name='post[date]')
input(type='submit',value='输入')
效果如下