简单使用Nodejs+Express+Mongoose+Coffescript笔记 - CNode技术社区

简单使用Nodejs+Express+Mongoose+Coffescript笔记
发布于 13 年前 作者 linuxing3 10969 次浏览 最后一次编辑是 9 年前

对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语法糖

回到顶部

AltStyle によって変換されたページ (->オリジナル) /