Nodejs简单使用Express+Mongoose+Coffeescript笔记
Nodejs简单使用Express+Mongoose+Coffeescript笔记
对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=‘输入’)
效果如下
Nodejs简单使用Express+Mongoose+Coffeescript笔记
对Nodejs+Express+Mongoose的应用很感兴趣,主要的文件用CoffeeScript来实现
刚刚开始学习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) ->
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
# 根据ID查找
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='输入')
效果如下
通过上述代码和配置,你可以创建一个简单的Node.js应用程序,使用Express框架处理HTTP请求,并利用Mongoose与MongoDB数据库进行交互。同时,通过CoffeeScript编写代码可以提高开发效率。
mongodb = require "./mongoapp.coffee"
不是应该 mongodb = require("./mongoapp.coffee")
还是 两者都可以
coffee语法糖
以下是关于“Nodejs简单使用Express+Mongoose+Coffeescript笔记”的内容补充与修正:
补充说明
-
配置与依赖:
- 使用
coffee-script
和express
模块。确保在项目根目录下安装这些依赖:
npm install express mongoose coffee-script --save
- 使用
-
连接MongoDB:
- 需要修正
mongoose.connect
方法的调用方式,应传递正确的URL格式。
mongoose.connect 'mongodb://localhost/blogs'
- 需要修正
-
错误处理:
- 在保存数据或查询时,应该添加错误处理逻辑。
-
视图渲染:
- 确保Jade模板引擎已正确安装并配置,或者考虑使用EJS等其他模板引擎。
示例代码修正
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 'mongodb://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) ->
if err
console.error "Error saving blog: ", err
else
console.log "Hello! " + aBlog.name
aBlog
module.exports.create = create
# 查找
findAll = (condition={}) ->
Blog.find condition, (err, docs) ->
if err
console.error "Error finding blogs: ", err
else
for doc in docs
console.log doc
module.exports.findAll = findAll
findById = (condition) ->
Blog.findById condition, (err, doc) ->
if err
console.error "Error finding blog by id: ", err
else
console.log "Found " + doc
module.exports.findById = findById
通过上述修改,代码将能够更稳健地运行,并处理错误。同时,确保你的数据库已经启动并可用。