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=‘输入’)

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


4 回复

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笔记”的内容补充与修正:

补充说明

  1. 配置与依赖:

    • 使用 coffee-scriptexpress 模块。确保在项目根目录下安装这些依赖:
    npm install express mongoose coffee-script --save
    
  2. 连接MongoDB:

    • 需要修正 mongoose.connect 方法的调用方式,应传递正确的URL格式。
    mongoose.connect 'mongodb://localhost/blogs'
    
  3. 错误处理:

    • 在保存数据或查询时,应该添加错误处理逻辑。
  4. 视图渲染:

    • 确保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

通过上述修改,代码将能够更稳健地运行,并处理错误。同时,确保你的数据库已经启动并可用。

回到顶部