express框架基础学习
01_express初体验
// 导入 express
const express = require('express');
// 创建应用对象
const app = express();
// 创建路由
app.get('/home', (req,res)=>{
res.end('hello, express');
})
// 监听端口,启动服务
app.listen(3000, () => {
console.log('服务已经启动,端口3000正在监听中...')
})
02_express路由
//一个路由的组成有请求方法、路径和回调函数组成
// 导入express
const express = require("express");
// 创建应用对象
const app = express();
// 创建get请求
app.get("/home", (req, res) => {
res.end("I am homePage");
});
// 创建post请求
app.post("/login", (req, res) => {
res.end('I am login')
});
// 不限制请求方法
app.all("/login", (req, res) => {
res.end('I am login')
});
// 不限制请求方法,通常用于托底路由规则
app.all("*", (req, res) => {
res.end('404 Not Found')
});
app.listen(3000,()=>{
console.log('服务已经启动,端口3000正在监听中...')
})
03_获取请求参数
/**
* 获取本机的ip=》cmd => ipconfig
*/
const express = require('express');
const app = express();
app.get('/request', (req, res)=>{
//原生操作
console.log(req.method);
console.log(req.url);
console.log(req.httpVersion);
console.log(req.headers);
// express操作
console.log(req.path);//获取请求地址
console.log(req.query);//获取请求参数
console.log(req.ip);//获取ip
console.log(req.get('host'))//获取主机
res.end('get params')
// 获取请求头
})
app.listen(3000,()=>{
console.log('服务已经启动,端口号为3000...')
})
04_获取路由参数
// 导入express
const express = require("express");
// 创建应用实例
const app = express();
// 创建路由
app.get("/:id.html", (req, res) => {
//在路由中添加参数占位符,类似于:id这种形式
// 获取路由参数 req.params
console.log(req.params.id);
res.end("hello express");
});
//监听端口,启动服务
app.listen(9000, () => {
console.log("服务启动,端口号为9000...");
});
05_响应设置
const express = require("express");
const app = express();
app.get("/other", (req, res) => {
// 原生响应
// res.statusCode = 404;
// res.statusMessage = 'love';
// res.setHeader('xxx','yyy');
// res.write('hello http');
// res.end('response setting')
// express 响应
// res.status(503);
// res.set('aaa','bbb');
// res.send('你好,express') // 无需设置字符集,express自动识别
res.status(500).set('abc','def').send('这些都是OK的') // 可以进行链式设置响应体
});
app.listen(3000, () => {
console.log("服务已启动...");
});
06_其他响应
const express = require("express");
const app = express();
app.get("/other", (req, res) => {
// 跳转响应
// res.redirect("http://atguigu.com");
// 下载响应
// res.download(__dirname+'/package.json')
// JSON响应
// res.json({
// name: "山里的闲人",
// zuoyoum: "赚更多的钱",
// });
// 响应文件内容
res.sendFile(__dirname + '/test.html')
});
app.listen(3000, () => {
console.log("服务已启动...");
});
07_全局中间件
const express = require("express");
const fs = require("fs");
const path = require("path");
const app = express();
function recordMiddleware(req, res, next) {
let { url, ip } = req;
fs.appendFileSync(
path.resolve(__dirname, "./access.log"),
`${url} ${ip}\r\n`
);
// 调用next
next();
}
// 使用中间件函数
app.use(recordMiddleware);
app.get("/home", (req, res) => {
res.send("前台首页");
});
app.get("/login", (req, res) => {
res.send("登录页");
});
app.all("*", (req, res) => {
res.send("<h1>404 Not Found<h1>");
});
app.listen(3000, () => {
console.log("服务已经启动...");
});
08_路由中间件
const express = require("express");
const app = express();
let checkCodeMiddleware = (req, res, next) => {
if (req.query.code === "521") {
next();
} else {
res.send("暗号错误");
}
};
app.get("/home", (req, res) => {
res.send("前台首页");
});
app.get("/login", checkCodeMiddleware, (req, res) => {
res.send("登录页");
});
app.get("/setting", checkCodeMiddleware, (req, res) => {
res.send("设置页面");
});
app.all("*", (req, res) => {
res.send("<h1>404 Not Found<h1>");
});
app.listen(3000, () => {
console.log("服务已经启动...");
});
09_静态资源中间件
/**
* 注意事项:
* 1、index.html文件为默认打开资源
* 2、如果静态资源与路由规则同时匹配,谁先匹配上就响应谁
* 3、路由响应动态资源,静态资源中间件响应静态资源
*/
const express = require('express');
const app = express();
app.use(express.static(__dirname+'/public'));
app.get('/home',(req,res)=>{
res.send('你好');
})
app.listen(3000, ()=>{
console.log('服务已经启动...')
})
10_获取请求体数据
// 需要使用插件body-parser
const express = require("express");
const bodyParser = require("body-parser");
// 解析JSON格式的请求体的中间件
// var jsonParser = bodyParser.json()
//解析querystring格式请求体的中间件
var urlencodedParser = bodyParser.urlencoded({ extended: false });
const app = express();
app.get("/login", (req, res) => {
res.sendFile(__dirname + "/login.html");
});
app.post("/login", urlencodedParser, (req, res) => {
console.log(req.body);
res.send("登录成功");
});
app.listen(3000, () => {
console.log("服务器启动成功");
});
11_图片防盗链
const express = require("express");
const app = express();
app.use((req, res, next) => {
//获取请求头中的referer
let referer = req.get("referer");
console.log(referer);
if (referer) {
let { hostname } = new URL(referer);
if (hostname !== "127.0.0.1") {
res.status(404).send("<h1>404 Not Found</h1>");
return;
}
}
next();
});
app.use(express.static(__dirname + "/public"));
app.listen(3000, () => {
console.log("服务已经启动...");
});
12_路由模块化
const express = require("express");
const app = express();
const homeRouter = require("./routes/homeRouter.js");
const adminRouter = require("./routes/adminRouter.js");
app.use(homeRouter);
app.use(adminRouter);
app.all("*", (req, res) => {
res.send("<h1>404 Not Found<h1>");
});
app.listen(3000, () => {
console.log("服务已经启动...");
});
routes文件夹
// adminRouter.js
const express = require("express");
const router = express.Router();
router.get("/home", (req, res) => {
res.send("前台首页");
});
router.get("/search", (req, res) => {
res.send("内容搜索");
});
module.exports = router;
//homeRouter.js
const express = require("express");
const router = express.Router();
router.get("/admin", (req, res) => {
res.send("后台首页");
});
router.get("/setting", (req, res) => {
res.send("设置中心");
});
module.exports = router;