• 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.运行效果

    image

    演示网址:http://kklldog.chinacloudapp.cn:8888/message

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

  • 相关阅读:
    Python中的模块与包
    Mac eclipse找不到source的解决办法
    Git常用命令
    MiniCrowler
    九度题库(所有题目整理,适合计算机考研和面试的人用)
    gtest 安装
    计算广告的相关学习资源
    使用python pylab库 画线
    3到6年的.NETer应该掌握哪些知识?
    迭代器模式的一种应用场景以及C#对于迭代器的内置支持
  • 原文地址:https://www.cnblogs.com/kklldog/p/3625014.html
Copyright © 2020-2023  润新知