放逐忧伤

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
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);

  

posted on 2012-05-03 15:18  放逐忧伤  阅读(938)  评论(0)    收藏  举报