01了解express
js
const express = require('express')
// createApplication
// 中间件
const app = express() //return function
// app.use
app.get('/', (req, res, next) => {
/**
* request
*
* response
*
* next 用于执行下一个中间件函数
* 调用栈中的下一个中间件
*
* next or end
*/
res.end('Welcome')
})
app.listen(8080, () => {
console.log('启动成功8080');
})
02 express 中间件
js
const express = require('express');
const app = express();
// 按顺序 依次匹配 匹配all路径
// 编写普通的中间件
// app.use(function (req, res, next) {
// console.log('第一个中间件');
// // 周期中只可以有 一个end 周期事件 提前结束 next()不能有end方法
// // res.end('hello world!');
// next();
// })
// app.use(function (req, res, next) {
// console.log('第二个中间件');
// next();
// })
// app.use(function (req, res, next) {
// console.log('第三个中间件');
// res.end('简单的中间件')
// })
/**
* 路径匹配中间件
*
*/
// app.use('/home',function (req, res, next) {
// console.log('第一个带路径的中间件');
// res.end('路径中间件')
// })
/**
* 路径 &方法中间件
*/
// app.get('/login', function(req, res, next){
// console.log('路径 & 方法中间件');
// res.end('路径 & 方法中间件')
// })
/**
* 注册多个中间件
*/
app.get('/logins', (req, res, next) => {
console.log("注册多个中间件1");
next();
}, (req, res, next) => {
console.log("注册多个中间件2");
res.end('注册多个中间件')
})
app.listen(8080, () => {
console.log('8080启动成功');
})
03 express 应用
js
const express = require('express')
const multer = require('multer')
const path = require('path')
const app = express()
// app.use(function (req, res, next) {
// // 统一处理json
// if (req.headers['content-type'] === 'application/json') {
// req.on('data', function (data) {
// const json = JSON.parse(data.toString())
// if (!req.hasOwnProperty('body')) {
// req.body = {}
// }
// let info = { ...req.body, ...json }
// req.body = info
// console.log(info);
// })
// }
// req.on('end', () => {
// next()
// })
// })
/**
* body-parser express 3.x 内置
* body-pasers express 4.x 移出
* body-pasers express 4.16.x 内置成函数 类似功能
*/
app.use(express.json())
/**
* extended
* true 对urlencoded 进行解析 使用 第三库 qs
* false 对urlencoded 进行解析 使用 Nodejs内置函数 querystring
*
* */
app.use(express.urlencoded({ extended: true }))
/**
* formData
* 安装multer
* 调用 any方法 //解析非文件
*/
// const upload = multer()
// app.use(upload.any())
// app.post('/login', (req, res, next) => {
// // 获取json
// // req.on('data', (data) => {
// // console.log(data.toString());
// // })
// // req.on('end', () => {
// // res.end('Welcome')
// // })
// // express
// console.log('', req.body);
// res.end('Welcome')
// })
/**
* formdata
* 上传文件 单文件
* */
const uploads = multer({
dest: './uploads/'
})
app.post('/uploads', uploads.single('file'), (req, res, next) => {
console.log('获取文件信息', req.file)
res.end('上传文件成功uploads')
})
const upload = multer({
storage: multer.diskStorage({
destination: (req, file, cb) => {
cb(null, './uploads/')
},
filename: (req, file, cb) => {
// 原始文件扩展名称
cb(null, +new Date() + path.extname(file.originalname));
}
})
})
app.post('/upload', upload.array('file'), (req, res, next) => {
console.log('获取文件信息', req.files)
res.end('上传文件成功 upload')
})
/**
* 保存日志信息
* log morganWriteStream
*/
const morgan = require('morgan')
const fs = require('fs')
// 路径需要手动创建
const writeStream = fs.createWriteStream('./logs/access.log', { flags: "a+" })
// app.use(morgan("combined", { stream: writeStream }))
app.get('/log', morgan("combined", { stream: writeStream }),(req, res, next) => {
res.end('输出日志')
})
/**
* 数据传输query
*
*/
app.get('/query', (req, res, next) => {
console.log(req.query);
res.end('query')
})
/**
* 数据传输params
*/
app.get('/parmas/:id', (req, res, next) => {
console.log(req.params);
res.end('params')
})
app.listen(8080, () => {
console.log('应用 8080');
})
04 express response对象
js
const express = require('express');
const app = express()
/**
* 返回数据 json格式
*/
app.get('/res', (req, res, next) => {
// 传统方案
// res.type('application/json') //设置 数据格式
// res.end(JSON.stringify({name:'yhx',age:23}))
// res.json
res.json({ name: 'yhx', age: 23 })
// res.json(['wang','li','liu'])
})
/**
* 返回状态码
*/
app.get('/status', (req, res, next) => {
// 传统方案
// res.type('application/json') //设置 数据格式
// res.end(JSON.stringify({name:'yhx',age:23}))
// res.json、
res.status(204)
res.json({ name: 'yhx', age: 23 })
})
app.listen(8080, () => {
console.log('8080 服务启动成功');
})
05 express静态资源服务器
js
/**
* 静态资源服务部署
* express.static
* */
const express = require('express');
const app = express()
app.use('/static',express.static('./static/index.html'));
app.listen(8080, () => {
console.log('静态资源启动');
})
06 express错误处理
js
/**
* 错误处理
*/
const express = require('express');
const app = express()
app.get('/error', (req, res, next) => {
// 带参数 则会进入 err
next(new Error("ERROR 应该被返回的错误信息~~~~~~~~~~~~~~~~"))
})
app.use((err, req, res, next) => {
res.end(err.message)
})
app.listen(8080, () => {
console.log('router 路由已启动');
})
/**
*
*/
07 express路由
js
const express = require('express');
const userRouter = require('./user/index')
const app = express()
app.use('/user',userRouter)
app.listen(8080, () => {
console.log('router 路由已启动');
})
js
/**
* express 路由
* 一个 Router实例 拥有完整的 中间件和路由系统
* mini-app (迷你应用程序)
*/
const express = require('express')
const router = express.Router()
router.get('/',(req,res,next) => {
res.end('get')
})
router.post('/', (req, res, next) => {
res.end('post')
})
router.delete('/', (req, res, next) => {
res.end('delete')
})
router.put('/', (req, res, next) => {
res.end('put')
})
module.exports = router