1.一般响应设置(使用express框架实现)
const express = require('express');
const app=express();
// 此处填入一个id的占位符
app.get('/response',(req,res)=>{
// 原生响应
// res.setHeader('Content-Type','text/plain; charset=utf-8');
// res.setHeader('aaa','bbb');
// res.statusCode=404;
// res.statusMessage='Not Found';
// res.end('hello express');
// express响应(send可以设置响应体)
res.status(404).send('hello express');
res.set('aaa','bbb');
})
app.listen(9000,()=>{
console.log('端口服务运行中...');
})
2.重定向、下载响应、JSON响应
2.1 重定向:实现访问other路由后跳转到百度
// 导入express
const express = require('express');
// 创建应用对象
const app = express();;
// 实现访问other路由后跳转到百度
// 创建路由
app.get('/other',(req,res)=>{
// 跳转响应
res.redirect('https://www.baidu.com/');
res.status(404).send('hello express');
})
// 监听端口、启动服务
app.listen(9000,()=>{
console.log('端口服务运行中...');
})
2.2 下载响应
// 导入express
const express = require('express');
// 创建应用对象
const app = express();;
// 实现访问other路由后跳转到百度
// 创建路由
app.get('/other',(req,res)=>{
// 跳转响应
// res.redirect('https://www.baidu.com/');
// res.status(404).send('hello express');
// 下载响应
res.download(__dirname+'/singer.json');
})
// 监听端口、启动服务
app.listen(9000,()=>{
console.log('端口服务运行中...');
})
结果
2.3 json响应--最常用的
const express = require('express');
const app = express();
app.get('/',(req,res)=>{
res.json({
name:'张三',
age:18
});
});
app.listen(9000,()=>{
console.log('服务启动成功');
});
3.express中间件--类似于前端axios的拦截器
3.1 全局中间件
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
// 创建中间件
function recodemiddleware(req,res,next){
let{url,ip,params}=req;
fs.appendFileSync(path.resolve(__dirname,'./log.txt'),`${ip} ${url} ${params}\n`);
// 必须调用next,否则后续进行的路由处理不会执行
next();
}
// 使用中间件(必须)
app.use(recodemiddleware);
app.get('/home', (req, res) => {
res.send('前台');
});
app.get('/login', (req, res) => {
res.send('后台');
});
// 404 处理
app.use((req, res) => {
res.status(404).send('404 not found');
});
app.listen(9000, () => {
console.log('服务启动成功');
});
结果:
3.2 路由中间件
需求:判断url中code参数是否为521
3.2.1 未封装中间件
const express = require('express');
const app = express();
app.get('/home', (req, res) => {
res.send('前台');
});
app.get('/login', (req, res) => {
if(req.query.code==='521'){
res.send('后台首页');
}
else{
res.send('暗号错误');
}
});
app.get('/setting', (req, res) => {
res.send('后台设置');
});
// 404 处理
app.use((req, res) => {
res.status(404).send('404 not found');
});
app.listen(9000, () => {
console.log('服务启动成功');
});
login路由后未加code参数
login后添加code参数
3.2.2 封装中间件
const express = require('express');
const app = express();
// 声明中间件
let checkcode=(req, res, next)=>{
if(req.query.code==='521'){
next();
}
else{
res.send('暗号错误');
}
}
app.get('/home', (req, res) => {
res.send('前台');
});
// 将封装的中间件放置在需要的路由上(这里测试放在login和setting路由上)
app.get('/login', checkcode, (req, res) => {
res.send('后台首页');
});
app.get('/setting', checkcode, (req, res) => {
res.send('后台设置');
});
// 404 处理
app.use((req, res) => {
res.status(404).send('404 not found');
});
app.listen(9000, () => {
console.log('服务启动成功');
});
setting成功使用封装的中间件
4 静态资源中间件
结果:
5.使用body-parse中间件获取请求体数据:推荐以路由中间件的方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>form表单</title>
</head>
<body>
<form method="post" action="http://localhost:9000/login">
用户名:<input type="text" name="username" placeholder="请输入用户名"><br>
密码:<input type="password" name="password" placeholder="请输入密码"><br>
<button>登录</button>
</form>
</body>
</html>
// 导入express
const express = require('express');
// 创建应用对象
const app = express();;
const bodyParser = require('body-parser');
// 解析JSON格式的请求体中间件
const jsonParser = bodyParser.json();
// 解析querysting格式的请求体中间件
const urlencodedParser = bodyParser.urlencoded({ extended: false });
// get:/login 显示表单网页
// post:/login 获取表单中的用户名和密码
// 创建路由规则
app.get('/login',(req,res)=>{
res.sendFile(__dirname+'/form.html');
})
app.post('/login',urlencodedParser,(req,res)=>{
res.send('获取用户数据');
// 通过获取请求体数据获取请求体数据:(使用body-parser中间件)
const bodyParser = require('body-parser');
console.log(req.body);
app.use(bodyParser.urlencoded({ extended: false }));
})
// 监听端口、启动服务
app.listen(9000,()=>{
console.log('端口服务运行中...');
})
向服务器发送post:
结果:
6.防盗链:禁止不同地址的服务器对此服务器资源进行请求
实操:通过更改referer请求头进行资源申请