nodejs

nodejs Express框架

npm install --save express
--save 表示自动修改 pakage.json

var express = require("express");
var app = express();
app.get("/",function(req,res){
	res.sed("nihao");
})
app.get("/haha",function(req,res){
	res.sed("这是haha页面");
})
app.get(/^/student/([d]{10})$/,function(req,res){
	 res.send("学生信息,学号" + req.params[0]);
});
app.get("/teacher/:gonghao",function(req,res){
	res.send("老师信息,工号" + req.params.gonghao]);
})
app.listen(3000);

静态文件处理

var express = require("express");
var app = express();
app.use(express.static("./public"));
app.get("/haha",function(req,res){
	res.send("haha");
});
app.listen(3000);

Express 模板引擎 haha.ejs

var express = require("express");
var app = express();
app.set("view engine","ejs");
app.get("/",function(req,res){
	res.render("haha",{
		"news":["我是小新闻啊","我也是啊","哈哈哈哈"]
	})
})
app.listen(3000);

路由Router

正则表达式中,未知部分用圆括号分组,然后可以用

req.params[0], [1] 得到 req.params 类数组对象。

:是更推荐的东西

app.get("网址",function(req,res){
	
});
app.get(/^/student/([d]{10})$/,function(req,res){
	 res.send("学生信息,学号" + req.params[0]);
});
app.get("/student/:id",function(req,res){
	var id = req.params["id"];
	var reg = /^[d]{6}$/;
	if(reg.test(id)){
		res.send(id);
	}else{
	   res.send("请检查格式");
	}
});
app.get("/:username/:oid",function(req,res){
	var username = req.params["username"];
	var oid = req.params["oid"];
	ren.write("username");
	ren.end("oid");
})
app.post("网址",function(req,res){
	
});
如果想处理这个网址的任何method请求,那么写 all
app.all()

router 案例,restful路由设计

var express = require("express");
var app = express();
//设置模板引擎
app.set("view engin","ejs");   //.ejs模板
app.get("/",function(req,res){
	res.render("form");
});
app.post("/",function(req,res){
	//将数据添加进入数据库
	res.render("成功");
});
app.listen(3000);

中间件(水流从上往下流动) 如果get post 没有 next参数, 那么就匹配到第一个路由就不往下匹配了。

下面两个路由看似没有关系,但是实际上冲突了,匹配到第一个就不会往下匹配了

1.更换位置

2.next()

3.use() 中间件, 他的网址不是精确匹配,而是拓展。

var express = require("express");
var app = express();
var a = 100;
app.get("/:username/:id",function(req,res,next){
	var username = req.params.username;
	//检索数据库,如果username不存在,那么next()
	if(username){
		res.send("用户信息");
	}else{
		next();
	}
});
app.get("/admin/login",function(req,res){
	a++;
	res.render(a.toString()+"2");
});
app.use("/admin",function(req,res){
    res.send("你好");
	console.log(req.originalUrl+"
"); // '/admin/new'
	console.log(req.baseUrl); // '/admin'
	console.log(req.path); // '/new' 
	res.write(req.originalUrl+"
");
	res.write(req.baseUrl+"
");
	res.write(req.path+"
");
});
app.use("/"); // 拦截任何网址。
// 当不写路径的时候,实际上相当于 "/".
app.use(function(req,res,next){
	console.log(new Date());
})
app.listen(3000); 

app.use()使用 给了我们增加一些特定功能的场所

app.use(haha); //可以省掉 “/” app.use("/");
app.listen(3000);
function haha(req,res){
	var filePath = req.originalUrl;
	//根据当前网址,读取public文件夹
	//如果有这个文件,那么渲染这个文件
	//如果没有这个文件,那么 next();
	fs.readFile("./public/"+filePath",function(){
		if(err){
			//文件不存在
			next();
			return;
		}
		res.send(data.toString());
	});
}

express 的静态资源服务

var express = require("express");
var app = express();
//静态服务  开放 public
app.use("/jingtai",express.static("./public"));
//新的路由
app.get("/",function(req,res){
	res.send("哈哈");
})
app.listen(3000);

render 呈递模板引擎 和send() 只能用一次,可以自动设置

var express = require("express");
var app = express();
app.set("views","a");
app.set("view engine","ejs");
app.get("/",function(req,res){
	res.render("haha",{news:[]});
});
app.get("/check",function(req,res){
	res.send({
		"user":ok;
	})
})
app.listen(3000);

get和post

var express = require("express");
var app = express();
app.get("/",function(req,res){
	console.log(req.query); // 参数
	res.send();
})
app.listen(3000);
var express = require("express");
var app = express();
app.set("view engin","ejs");
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extend:false}));
app.post("/",function(req,res){
	res.setHeader('Content-Type','text/plain')
	console.log(req.body); // 参数
})
app.listen(3000);

Ajax 前后端交换原理

public文件 里面含有 content.html页面

content.html
jquery 发送 Ajax请求。
<script>
   $.get("/news",function(data,status){
	   
   })
</script>
app.js
var express = require("express");
var app = express();
var shujuku = [
	
];
app.use(express.static("./public"));  //开放public文件夹
app.get("/news",function(req,res){
	res.json(shujuku);
})
app.listen(3000);

noSQL Mongodb

Dao层封装 db.js

 var mongodb = require('mongodb').MongoClient;
 // 封装成内部函数
 function __connectDB(callback){
	 var url = "mongodb://localhost:27017/haha";
	 //连接数据库
	 MongoClient.connect(url,function(err,db){
		 callback(err,db);
	 });
 }
 export.insertOne = function(collectionName,json,callback){
	 __connectDB(function(err,db){
		 db.collection(collectionName).insertOne(json,function(err,result){
			 callback(err,result);
			 db.close(); //关闭数据库
		 });
	 })
 };
//__connectDB(function(err,db){
	 //表示连接成功之后做的事情
//}); 

调用,使用封装

var express = require("express");
var app = express();
var db = require("./module/db.js");
app.get("/",function(req,res){
	db.insertOne("teacher",{"name":"小红"},function(err,result){
		   if(err){
			   console.log("插入失败");
			   return;
		   }
		   res.send("插入成功");
	})
})

mongoose 简介, 将javaScript对象与数据库产生关系的一个框架,通过操作

对象操作数据库 npm install mongoose

// 引包
var mongoose = require('mongoose');
//连接数据库
mongoose.connect('mongodb://localhost/haha');
//创建了一个模型。猫的模型。所有的猫,都有名字,是字符串 "类"
var Cat = mongoose.model('Cat',{name:String});
//实例化一只猫
var kitty = new Cat({name:'Zildjian'});
//调用这只猫的save方法,保存这只猫。
kitty.save(function(err){
	if(err)
	console.log('meow');
})

原文地址:https://www.cnblogs.com/weichenji0/p/12619246.html