/*
Express 中间件 :
中间件的功能包括:
执行任何代码;
修改请求和响应对象;
终结请求-响应循环;
调用堆栈中的下一个中间件。
如果 get 、 post 回调函数中,没有 next 参数,那么就匹配上第一个路由,就不会往下匹配了。
如果想往下匹配,那么就需要写 next() 。
中间件:
中间件:匹配路由之前或者匹配路由完成后的一系列操作。
中间件如果想往下匹配,那么需要写 next() 。
中间件经常用来做权限判断:没有登录跳转到登录页面,登录以后就显示登录后的页面。
Express 应用可以使用的几种中间件:
应用级中间件;
路由级中间件;
错误处理中间件;
内置中间件;
第三方中间件。
*/
const express = require("express");
const ejs = require("ejs");
const bodyParser = require("body-parser");
const app = express();
/* ⑤ 第三方中间件 body-parser ,
1、安装中间件 : npm i body-parser --save ;
2、声明: const bodyParser = require("body-parser");
3、配置中间件,
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
4、接收 post 数据
req.body
*/
// 配置模板引擎
app.engine("html", ejs.__express);
app.set("view engine", "html");
// ④ 内置中间件,配置静态文件目录
// 127.0.0.1:3003/css/base.css 访问该地址试试看
app.use(express.static("static"));
// ① 应用级中间件(经常用于权限判断)
app.use((req, res, next) => {
console.log(new Date());
next();
});
// 第三方中间件 bodyParser 配置:
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.get("/", (req, res) => {
res.send("首页12");
});
// ② 路由级中间件(用得少),需要添加参数 next , 和执行往下匹配 next() 函数。
app.get("/news/add", (req, res, next) => {
console.log("执行增加新闻");
next();
});
app.get("/news/:id", (req, res) => {
res.send("新闻页面:动态路由");
});
// login
app.get("/login", (req, res) => {
// 在express 获取 get 传值非常简单,直接 req.query 就可以了
// req.query
res.render("login", {});
});
// doLogin
app.post("/doLogin", (req, res) => {
// req.body 获取post 传值
var body = req.body;
console.log(body);
res.send("执行提交:" + body.username);
});
// ③ 错误处理中间件,跟应用级中间件一样的。
// status 状态码 404 时候,就跳转到指定的404页面。
//要放所有路由的底下
app.use((req, res, next) => {
res.status(404).send("404 页面不存在");
});
app.listen(3005);
console.log("run server http://127.0.0.1:3005");