简单使用Nodejs+Express+Mongoose+Coffescript笔记
发布于 2年前 作者 linuxing3 2868 次浏览

对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='输入') 

效果如下 发布新记录的页面

2 回复
    mongodb = require "./mongoapp.coffee" 

不是应该 mongodb = require("./mongoapp.coffee") 还是 两者都可以

coffee语法糖

回到顶部