什么是express?
express是基于node.js平台的后台框架,通俗点来说就是为了方便,快速的完成node。
在这里要注意一下!
express不同于前台框架jQuery中jq对象和dom对象不可以混用,在express中是可以参差一些原生node的。
express的下载:
1.npm init 初始化pakage.json
2.npm install express --save
express的使用
let express = require("express");//引入expresslet app = express(); //创建了一个express的应用app.use(express.static("./app")); //静态伺服app.get(path,function(req,res){ res.send({ "name":"jack"})//send中是不需要转成str或者buffer,写的时候按照严格规范来})//这里的path可以是一种正则,大小写不区分自动转寒app.listen(3000);//监听端口
这里就可以看出express相比较原生node减少了大量的代码使用
express的一个重点模板引擎
想要使用模板引擎就必须用到ejs模块
// 引入ejsvar ejs = require("ejs");//模板 day是变量var string = "今天星期<%= day %>,天气真好";//数据var data = { day : "三"}// 数据绑定var html = ejs.render(string,data);console.log(html);//今天星期三,天气真好
这里的模板写法十分独特,下面用一个实例来说明
提醒一下:模板一定要写在ejs文件里
ejs代码:
Document 今天星期<%= day %>,天气真好
- <% for(var i = 0;i < news.length;i++){ if(news[i].num > 100){ %>
- <%= news[i].title %> <% } } %>
js代码:
原生node写法
var ejs = require("ejs");var fs = require("fs");var http = require("http");var server = http.createServer(function(req,res){ fs.readFile(path,function(err,data){ //读取模板 // 模板加载完成 var template = data.toString();//改变数据格式 // 数据 var dota = { day : "三", news : [ { "title" : "美文阅读","num" : 300}, { "title" : "杂志小说","num" : 500}, { "title" : "动漫影视","num":50} ] } // 数据和模板进行绑定 var html = ejs.render(template,dota); // 展示 res.writeHead(200,{ "content-type":"text/html;charset=utf8"}) res.end(html); })});server.listen(3000)
express写法
var express = require("express");var app = express();//使用模板引擎的时候需要设置//1.不需要引入ejs,不需要引入fs,httpapp.set("view engine","ejs");//引入模板// 展示app.get("/",function(req,res){ // 数据 var data = { day : "三", news : [ { "title" : "美文阅读","num" : 300}, { "title" : "杂志小说","num" : 500}, { "title" : "动漫影视","num":50} ] } res.render("index",data)})app.listen(3000);
中间件问题
// 正常情况下未加中间件var express = require("express");var app = express();app.get("/",function(req,res){//每次都进入这里 console.log(1)//1})app.get("/",function(req,res){//永远不会进入 console.log(2)})app.listen(3000);
每次都进入前面接口是因为我们path路径可以写成一个正则的形式,每次都可以匹配第一个接口,所以后面的接口永远不会进去
// 当我们加入next中间件执行next()可以跳到下一个接口//1和2都会打印这说明两个接口都进入了var express = require("express");var app = express();app.get("/",function(req,res,next){ console.log(1)//1 next()})app.get("/",function(req,res){ console.log(2)//2}) app.listen(3000)
这样我们就可以利用中间件做一个计数器,每次都会进入第一个请求。
注意:
中间件所在的位置至关重要,在下面的话就不行
express的get和post获取参数方法
// express 获取get参数// 原生的获取方式,就是url.parse(req.url,true).queryvar express = require("express");var app = express();app.get("/",function(req,res){ console.log(req.query); res.send("OK")})app.listen(3000)
//express 中post获取参数的方式var express = require("express");var bodyParser = require("body-parser");var app = express()app.set("views","st");app.set("view engine","ejs"); app.get("/",function(req,res){ res.render("form");})app.use(bodyParser.urlencoded({ extended: false })); //post请求的请求头app.post("/",function(req,res){ console.log(req.body); res.send("post方式提交成功");})app.listen(3000);