(该代码仅作为参考例子使用,路由为自定义的模拟express框架路由)
index.js
var http=require('http');
var ejs=require('ejs');
const MongoClient = require('mongodb').MongoClient;
var app=require('./express-route.js');
var url=require('url');
const dbUrl = 'mongodb://127.0.0.1:27017';
/* 创建服务 */
http.createServer(app).listen(3000);
/* 增加数据 */
app.get('/add',function(req,res){
//连接数据库 mgdemo:数据库名称;student:集合名称
MongoClient.connect(dbUrl, function(err, client) {
if(err){
console.log("数据库连接失败");
return false;
}
var db=client.db('mgdemo');
db.collection('student').insertOne({"name":"zhangsan","age":29},(error,result)=>{
if(error){
console.log("增加数据失败");
return false;
}
res.send("增加数据成功");
client.close();
})
});
})
/* 修改数据 */
app.get('/edit',function(req,res){
MongoClient.connect(dbUrl, function(err, client) {
if(err){
console.log("数据库连接失败");
return false;
}
var db=client.db('mgdemo');
db.collection("student").updateOne({"name":"zhangsan"},{$set:{"age":90}},(error,result)=>{
if(error){
console.log("修改数据失败");
return false;
}
res.send('数据修改成功');
client.close();
})
})
})
/* 删除数据 */
app.get("/delete",function(req,res){
MongoClient.connect(dbUrl,(err,client)=>{
if(err){
console.log("数据库连接失败");
return false;
}
let query=url.parse(req.url,true).query;
var db=client.db('mgdemo');
db.collection('student').deleteOne(query,(error,result)=>{
if(error){
console.log("数据删除失败");
return false;
}
res.send("数据删除成功");
client.close();
})
})
})
/* 查询数据 */
app.get("/",function(req,res){
MongoClient.connect(dbUrl,(err,client)=>{
if(err){
console.log("数据库连接失败");
return false;
}
var db=client.db('mgdemo');
var userRel=db.collection('student').find();
var list=[];
userRel.each((error,col)=>{
if(error){
console.log("数据读取失败");
return false;
}else{
if(col!=null){
list.push(col);
}else{
//ejs渲染模板
ejs.renderFile('./index.ejs',{list},(err,data)=>{
res.send(data);
})
}
}
client.close();
})
})
})
express-route.js
var url=require('url');
//封装方法end
function changeRes(res){
res.send=function(data){
res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
res.end(data);
}
}
//暴露的模块
var Server=function(){
var G=this; /*全局变量*/
//处理get和post请求
this._get={};
this._post={};
var app=function(req,res){
changeRes(res);
//获取路由
var pathname=url.parse(req.url).pathname;
if(!pathname.endsWith('/')){
pathname=pathname+'/';
}
//获取请求的方式 get post
var method=req.method.toLowerCase();
if(G['_'+method][pathname]){
if(method=='post'){ /*执行post请求*/
var postStr='';
req.on('data',function(chunk){
postStr+=chunk;
})
req.on('end',function(err,chunk) {
req.body=postStr;
G['_'+method][pathname](req,res); /*执行方法*/
})
}else{ /*执行get请求*/
G['_'+method][pathname](req,res); /*执行方法*/
}
}else{
res.end('no router');
}
}
app.get=function(string,callback){
if(!string.endsWith('/')){
string=string+'/';
}
if(!string.startsWith('/')){
string='/'+string;
}
// /login/
G._get[string]=callback;
}
app.post=function(string,callback){
if(!string.endsWith('/')){
string=string+'/';
}
if(!string.startsWith('/')){
string='/'+string;
}
G._post[string]=callback;
}
return app;
}
module.exports=Server();
index.ejs
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
<h2>这是一个ejs的后台模板引擎</h2>
<ul>
<% for(var i=0;i<list.length;i++){%>
<li><%= list[i].name %></li>
<%}%>
</ul>
</body>
</html>
网友评论