MongoDB增删改查例子

var

    express    = require('express'),

    app         = express.createServer(),

    hogan = require('express-hogan.js'),

    mongoose = require('mongoose'),

    Schema = mongoose.Schema;

    mongoose.connect('mongodb://localhost/aaaaa');

/*

 require()是node.js提供的函数,可以让你引入其他模块以调用模块的函数和变量,默认下node.js会在$NODE_PATH和目前js所在目录下的node_modules文件夹下去寻找模块。require也可以用来载入自己写的模块哦~这样涉及到node.js的模块机制,后面有机会就在介绍。

 第二行的express.createServer()就是在建立server,而中间的module.exports也是涉及到node.js的模块机制,以后再说。

 */



app.configure(function() {

    app.set('views', __dirname + '/views');

    app.set('view engine', 'html');

    /*

    上面两行是设置views文件夹,即模板文件夹,__dirname是node.js里面的全局变量,即取得执行的js所在的路径,

    另外__filename是目前执行的js文件名。所以,app.set(‘views’, __dirname + ‘/views’);是设置views的文件夹。

    而app.set('view engine', 'jade');是设置express.js所使用的render engine。除了Jade之外,

    express.js还支持EJS(embedded javascript)、Haml、CoffeScript和jQuery template等js模板。

     */

    app.use(express.bodyParser());

    app.use(express.methodOverride());

    app.use(app.router);



    /*

     express.bodyParser()是Connect內建的middleware,设置此处可以将client提交过来的post请求放入request.body中。

     express.methodOverride()也是Connect內建的,可以协助处理POST请求伪装PUT、DELETE和其他HTTP methods。

     app.router()是route requests,但express.js的官方文件是这句可有可无,并且经过测试还真的是这样,不过还是写上吧。

     express.static()也是一个Connect內建的middleware来处理静态的requests,例如css、js、img文件等。所以static()里面指定的文件夹中的文件会直接作为静态资源吐出来。

    */

    app.register('.html', hogan);//注册模板

    app.set('view options', {

        layout: false

    });

});

app.configure('production', function(){

    //console.log('in configure with production');

    var oneYear = 31557600000;

    app.use(express.static(__dirname + '/static', { maxAge: oneYear }));

    app.use(express.errorHandler());

});

app.configure('development', function(){

    //console.log('in configure with development');

    app.use(express.static(__dirname + '/static'));

    //console.log(__dirname + '/static');

    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));

});





app.get('/', function(req, res) {

    res.render('index.html',{locals:{a:"页面标题被模板替换了"}});

});

/*

当访问默认域名时跳转到index.html试图,注意后面后面参数的格式

 */

app.get('/user/:id?', function(req, res, next){

    var id = req.params.id;

    if (id) {

        Member.find({UserName:id},function(err,docs){

            if(docs.length==0)

            {

                console.log("No Data!");

            }else

            {

                res.send(docs[0].UserName+"<br/>"+docs[0].Password);

            }

        })

    } else {

        next(); // 将控制转向下一个符合URL的路由

    }

});





app.get('/user', function(req, res){

    Member.find(function(err,docs){

        if(docs.length!=0)

        {

            var msg=[];

            docs.forEach(function(m)

            {

                msg.push("<a href='User/"+m.UserName+"'>"+m.UserName+"</a>|"+m.Password+"|<a href='edit/"+m.UserName+"'>Eidt</a>|<a href='del/"+m.UserName+"'>Del</a>|<a href='http://localhost:3000'>Add</a><br/>");

            });

            res.send(msg.join(""));

        }

        else

        {

            res.send("No Data!");

        }



    })

});

app.get('/edit/:id', function(req, res){

    var id = req.params.id;

    Member.findOne({UserName:id},function(err,item){

        if(err)

        {

            res.send("HasError");

        }else

        {

            res.render('edit.html',{locals:{UserName:item.UserName,Password:item.Password}});

        }



    })

});

app.post('/edit/:id', function(req, res){

    var id = req.params.id;

    var username=req.body.username;

    var password=req.body.password;

    Member.findOne({UserName:id},function(err,item){

        if(err)

        {

            res.send("HasError");

        }else

        {



            Member.update({UserName:id},{UserName:username,Password:password},function(err,num){

                console.log(num);

            });

            res.redirect("/user");

        }



    })

});

app.get('/del/:id', function(req, res){

    var id = req.params.id;

    Member.findOne({UserName:id},function(err,item){

        if(err)

        {

            res.send("HasError");

        }else

        {

            item.remove();

            res.send("HasDel");

        }

    })

});

/*

 页面的路由处理,上例中当我们访问/user/12时返回“user 12”, csser注:app.get相当于在服务器注册了一个监听get请求事件的侦听器,

 当请求的URL满足第一个参数时,执行后面的回调函数,该过程是异步的。

 路由是一个可以被内部编译成正则表达式的简单字符串,比如当/user/:id被编译后,被内部编译后的正则表达式字符串看起来会是下面的样子(简化后):

 \/user\/([^\/]+)\/?,这里的'\'是转义用的

 */

app.post('/', function(req, res){

    console.log(req.body.username);

    console.log(req.body.password);

    try{

        var member=new Member({ UserName:req.body.username,Password:req.body.password})

        member.save();

        res.redirect("/user");

    }

    catch(except)

    {

        throw except;

    }

});



var MemberSchema =new Schema({

    UserName: String,

    Password: String

})

var Member = mongoose.model('Member', MemberSchema);

function StudentBuyBook(res)

{

    throw new Error;

     res.send("asdasd");

}



app.get('/500', function(req, res){

    throw new Error('keyboard cat!');

});

app.get('/Error1',function(req,res){



    res.send("Error Be Cacth")

});



app.listen(3000);

console.log(

    "Express server listening on port %d in %s mode",

    app.address().port,

    app.settings.env);

  

你可能感兴趣的:(mongodb)