nodejs+express+jade+mongodb给我baby做个小相册(2)-留言板
上一篇简单的实现了下照片的展现跟浏览功能,这一篇我将给这个程序添加一个留言的功能。那么留言的话肯定要涉及到数据持久了,其实对于这个小功能的话,用个xml就可以,不过为了看起来更加高大上,我决定使用mongodb来试一试。
1.安装mongoose
npm install mongoose
没什么好说的,直接用npm安装。
mongoose是类似ORM的一个框架,它提供一个Schema类来给用户自己定义数据模型,封装了CRUD操作,还可以帮你管理mongodb的连接,你自己不用去open,close连接。
2.封装mongodb操作类
在根目录新建一个models目录
在models下面添加mongodb.js
var mongoose = require(‘mongoose‘); mongoose.connect(‘mongodb://localhost/mongodb1‘); exports.mongoose = mongoose;
在models下面添加Message.js模型
var mongodb = require(‘./mongodb‘); var Schema=mongodb.mongoose.Schema; //定义message模型 var messageSchema=new Schema( { userName:String, content:String, createTime:{type:Date,default:Date.now} } ); mongodb.mongoose.model(‘message‘,messageSchema); var message=mongodb.mongoose.model(‘message‘); exports.add=function(userName,content,callback){ var msg = new message(); msg.userName=userName; msg.content=content; //save to db msg.save(function(err){ if(err){ console.log(err); callback(err); }else{ callback(null); } }); }; exports.getAll=function(callback){ message.find( {},null,{ sort: { ‘createTime‘:-1 } }, callback ); }
这样message的添加跟获取所有的操作就封装好了。
3.添加message.jade视图
extends layout block content div(class=‘container‘) form(class="form-horizontal" method=‘post‘) fieldset div(class="form-group") label(for=‘userName‘ class=‘col-sm-4 control-label text-info‘)=‘名称‘ div(class=‘col-sm-2‘) input(type="text" id=‘userName‘ name=‘userName‘ class=‘form-control input-sm‘ value=name required) div(class="form-group") label(for=‘msg‘ class=‘col-sm-4 control-label text-info‘)=‘内容‘ div(class=‘col-sm-6‘) textarea(id=‘content‘ name=‘content‘ class=‘form-control‘ required) div(class="form-group") div(class=‘col-sm-offset-4 col-sm-6‘) input(type="submit" class=‘btn btn-primary‘ value=‘提交‘) for msg in msgs div(class=‘row‘) div(class=‘col-sm-4 text-right‘) div(class=‘col-sm-8 text-info‘)=msg.userName+‘ 说:‘+msg.content script(src="/jqBootstrapValidation.js") script $(function () { $("input,select,textarea").not("[type=submit]").jqBootstrapValidation(); } );
这里还是使用bootstrap来做前端,使用jqBootstrapValidation来做数据验证。
4.添加message.js路由
var msgDb = require(‘../models/Message‘); var url = require("url"); var querystring = require("querystring"); exports.msgList = function(req, res){ var objectUrl = url.parse(req.url); var objectQuery = querystring.parse(objectUrl.query); var userName = objectQuery[‘userName‘]; //如果有用户名,说明前面已经提交过了,传递到视图上去,这样也没刷新后不用重新填写用户名 msgDb.getAll(function(err,messages){ if(err){ console.log(err); //异常跳转到error界面 res.redirect(‘/error‘); } else{ res.render(‘message‘, { title: ‘My Little Star‘,msgs:messages,name:userName }); } }); }; exports.saveMsg=function(req, res){ var userName= req.body.userName; var content= req.body.content; console.log(‘userId=‘+userName+‘ content=‘+content); msgDb.add(userName,content,function(err){ if(err){ console.log(err); res.redirect(‘/error‘); } else{ //保存成功,刷新message界面,顺便把用户名通过url传过去 res.redirect(‘/message?userName=‘+userName); } }); };
这里有2个方法,一个是post留言数据做保存,一个是展现所有数据。
4.在app.js注册message的路由
var message = require(‘./routes/message‘); app.get(‘/message‘, message.msgList); app.post(‘/message‘,message.saveMsg);
5.运行效果
演示网址:http://kklldog.chinacloudapp.cn:8888/message
最后为了我的小星星,求一个苏州地区的好坑,求各位大神推荐。
nodejs+express+jade+mongodb给我baby做个小相册(2)-留言板,古老的榕树,5-wow.com
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。