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

最后为了我的小星星,求一个苏州地区的好坑,求各位大神推荐。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

数据库结构版本控制

数据库结构版本控制 目录 1. 什么是数据库结构版本控制 2. 为什么要做数据库结构本版控制 3. 何时做数据库结构本版控制 4. 在哪里做数据库结构本版控制 ...

2837
来自专栏L宝宝聊IT

Mysql性能优化——慢查询分析

MYSQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入...

862
来自专栏逸鹏说道

zabbix最新SQL注入漏洞+EXP

最近zabbix又出大事了,高危的SQL注入漏洞,影响V3.0.4以下所有版本,请小伙伴及时修复。 漏洞概述: zabbix是一个开源的企业级性能监控解决方案。...

3238
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(999)-如何使用这个系统来开发?

前言 这篇文本讲述了这个框架的使用方式,及一些疑问的答疑,更加精准的使用这个框架来建立功能 经过几个版本的迭代,系统使用更加方便,代码更加简洁也更加的智能,...

2626
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(61)-如何使用框架来开发

前言 这篇文本讲述了这个框架的使用方式,及一些疑问的答疑,更加精准的使用这个框架来建立功能 经过几个版本的迭代,系统使用更加方便,代码更加简洁也更加的智能,...

2446
来自专栏杨建荣的学习笔记

一个60亿数据表改分区表+数据清理的改进思路(r7笔记第19天)

今天有个同学问我一个问题,也是一个实际的案例,我简单分析了一下,发现还是有很多可以考究的地方。仅做参考。 问题是,系统里目前有一个大表,因为历史数据的沉淀,目前...

3459
来自专栏数据和云

高频错误:ORA-01555深入剖析

黄玮(Fuyuncat) 资深Oracle DBA,个人网站www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. ORA...

2918
来自专栏乐沙弥的世界

记一次SQL server 2005 到SQL server 2008 数据库迁移

    最近周末完成了一个从SQL server 2005升级到SQL server 2008的升级迁移,其实质是一个服务器迁移的过程。比较复杂的是这个服务器上...

1154
来自专栏软件工程师成长笔记

centOS7安装MySQL流程介绍

1、隐藏密码 如:MySQL 连接远程数据库(192.168.5.116),端口“3306”,用户名为“root”,密码“123456”(这是我乱写的地址哈)...

1282
来自专栏耕耘实录

Zabbix最佳实践一:Zabbix4.0.2的安装与配置

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

2183

扫码关注云+社区