const express = require('express');
const bodyParser = require('body-parser');
const router = express.Router();
const app = express();
/**
* 请求体数据中间件, 将字符串类型的请求参数转化为键值对对象形式
* 例: console.log(req.body.username) > { username: 'admin', userpass: '123456' }
*/
const useParser = bodyParser.urlencoded({extended:false});
// 处理json形式请求体
const jsonParser = bodyParser.json();
// 静态资源中间件
app.use(express.static('./public')) // 这里public就是前端项目打包后的文件, 会自动寻找这个目录下的index.html
// 全局中间件
let testMiddleware = function (req, res, next){
console.log('定义中间件, 在此处处理请求参数跟回执参数');
next() // 向后执行,中间件中必须有执行next()
}
// 局部中间件
let testMiddleware1 = function (req, res, next){
console.log('定义中间件, 路由中间件,只针对某些或者某个路由');
next() // 向后执行,中间件中必须有执行next()
}
app.use(testMiddleware) // 全局使用中间件
// 请求路由规则
app.get('/home', (req, res) => {
console.log(req.url);
console.log(req.method);
console.log(req.headers);
console.log(req.query); //获取查询字符串
console.log(req.get('host')); //获取指定请求头
res.send('hello express')
})
// 获取指定路由参数
app.get('/:id.html', (req, res) => {
console.log(req.params); //获取路由参数
res.send('hello express')
})
// express响应
app.get('/response', (req, res) => {
res.status(500) //响应码
res.set('xxx','xxx') //响应头
res.send('hello express') //响应体
//连贯操作
res.status(404).set('xxx','yyy').send('你好朋友')
// 其他响应
res.redirect('http://atguigu.com')//重定向
res.download('./package.json');//下载响应
res.json();//响应 JSON
res.sendFile(__dirname + '/home.html') //响应文件内容
})
// 使用路由中间件
app.get('/middleware',testMiddleware1 , (req, res) => {
console.log('使用路由中间件')
res.send('哈喽 路由中间件')
} )
// 路由模块, 一般会将路由单独拆分成分一个或者多个模块文件
router.get('/routers', (req, res) => {
res.send('这是一个路由')
})
/**
* 这里导出了路由实例对象, express实例对象app引用时app.use(router)
*/
module.exports = router;
app.listen(3000, () => {
console.log('服务启动中....');
})