一、简介
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。
二、安装与运行
终端输入命令安装,这与其他模块一样
sudo npm install express
运行并初始化express
var express = require("express");
var app = express();//初始化
三、核心功能
路由
引入一下模块,body-parser是post请求方式封装的模块,get请求不可用。
var express = require("express");
var app = express();
var querystring = require("querystring");
// 只是post请求方式取参
var bodyParser = require("body-parser");
var app = express();
// 引入bodyParser
app.use(bodyParser.urlencoded({
extended:true
}));
获取请求参数* req.host:返回请求头里取的主机名(不含端口号)* req.path:返回请求的url的路径名* req.query:是一个可获取客户端get请求路径参数的对象属性,包含着被解析过的请求参数对象,默认为{}* req.params:获取路由的parameters
返回参数
- res.send();返回数据,默认会转为字符串,编码为utf8* res.sendFile();返回文件* res.sendStatus();返回状态码
- get请求
app.get(path,cb);
- path:为请求的路径
- cb :第二个参数为处理函数的回调,有两个参数request和response,代表请求信息和响应信息
- 使用res.sendFile()方法加载post提交页面
- 使用res.send()方法传输数据,
使用express模板比原生的node传输方便了很多,不需要去获取pathname,判断pathname的值...,只需要用app.get()就能实现数据交互的功能了。
app.get("/",function (req,res) {
// res.send("<h1>我是主页</h1>");
// 加载post提交页面
res.sendFile(__dirname+"/post.html");
})
app.get("/goods",function (req,res) {
res.send("我是商品页");
})
- post请求
使用app.post()来处理post请求;
原生node获取数据的方法,用流的方式读取数据,读完后获得数据,而使用body-parser模板时,post传输的数据便在req.body中,直接取就可以了,简化了读文档流的步骤。body-parser的配置看上面的已经配置了。
app.post("/post",function (req,res) {
// 原生node获取post参数的写法
// var str = "";
// req.on("data",function (chunk) {
// str += chunk;
// })
// req.on("end",function () {
// var data = querystring.parse(str);
// console.log(data);
// res.send(`<h1>姓名是:${data.username}年龄是:${data.age}</h1>`);
// })
// 通过body-parser获取到参数
console.log(req.body);
res.send(`<h1>姓名是:${req.body.username}年龄是:${req.body.age}</h1>`);
});
- post或者get请求
express模板封装了一个all方法,来处理不管是任何方式发送的请求,*为任意路径。
// get请求或者是post请求;
app.all("/*",function (req,res) {
// console.log(req._parsedUrl.pathname);
var pathname = req._parsedUrl.pathname;
if(pathname=="/get"){
var data = req.query;
res.send(JSON.stringify(data));
}else if(pathname!="/favicon.ico"){
res.sendFile(__dirname+pathname);
}
});
中间件
中间件的概念如下:
中间件能将数据进行传递,使用app.use方法实现,参数next指下一个中间件。如下面代码,money一层一层往下传,每个中间件都能对此进行操作。
var express = require("express");
var app = express();
// 中间件
app.use(function (req,res,next) {
// 省政府
req.money = 100;
next();
});
app.use(function (req,res,next) {
// 市政府
req.money -=20;
next();
});
app.use(function (req,res,next) {
// 区政府
req.money -= 20;
next();
});
// 错误处理中间件
app.use(function (err,req,res,next) {
if(err){
console.log(err);
}
});
app.all("/",function (req,res){
console.log(req.money);
res.send(""+req.money);
});
app.listen(7877);
cookie与session
- cookie
安装cookie-parser模块
npm install cookie-parser
设置cookie和获得cookie
参数:
- expires:cookie的过期时间,GMT格式。如果没有指定或者设置为0,则产生新的cookie。
- maxAge:是设置过去时间的方便选项,其为过期时间到当前时间的毫秒值。
var express = require("express");
var cookieParser = require("cookie-parser");
var app = express();
app.use(cookieParser());
// 设置cookie
app.get("/setcookie",function (req,res) {
// res.cookie("username","zhangsan",{maxAge:1000*7200});
var nowTime = new Date();
nowTime.setDate(nowTime.getDate()+7);
console.log(nowTime);
res.cookie("username","zhangsan",{expires:nowTime});
res.send("设置cookie");
});
app.get("/getcookie",function (req,res) {
var username = req.cookies.username;
res.send(`取到的cookie内容是${username}`);
})
app.listen(8788);
浏览器cookie:
- session
安装express-session模块
npm install express-session
session配置:
下面三个参数的具体意义:
- secret:"mysecret",
一个String类型的字符串,作为服务器端生成session的签名 - resave: false,
(是否允许)当客户端并行发送多个请求时,其中一个请求在另一个请求结束时对session进行修改覆盖并保存 - saveUninitialized: true,
初始化session时是否保存到存储。默认为true, 但是(后续版本)有可能默认失效,所以最好手动添加
var express = require("express");
var session = require("express-session");
var app = express();
app.use(session({
secret:"mysecret",
resave:true,
saveUninitialized:true
}));
session的设置在浏览器中读取不到,因为session是存储在服务器中的。
app.get("/setsession",function (req,res) {
req.session.username = "litiantian";
res.send("session设置成功");
});
app.get("/getsession",function (req,res) {
var username = req.session.username;
console.log(req.session);
res.send("session内容是:"+username);
});
app.listen(8989);
结束
这是express模块的api网址:https://www.zybuluo.com/XiangZhou/note/208532
需要调用什么接口,可以访问查看。