MongoDB增删改查例子
varexpress = 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.UserName+""+docs.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(""+m.UserName+"|"+m.Password+"|Eidt|Del|Add");
});
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);
页:
[1]