1.express的简单起步
const express = require('express'); // 引入
const app = express(); // 创建实例
//配置解析表单请求体 application/json
app.use(express.json())
// 配置解析表单请求体 application/x-www-form-urlencoded
app.use(express.urlencoded())
// 接口服务的格式
/*
METHOD 指代get/post/put/delete等请求方法
url 可以是一个路径字符串,可以是字符串模式(包含?+*()等判断符号),也可以是一个正则匹配的url
url中也可以包含路径参数,如/userInfo/:userId,可以在request.params.userId中取到路径参数,其中可以使用()进行正则校验
如
app.get('/user/:userId(\d+)', handle);
*/
app.METHOD(url, (request, response) => {
// 路由处理逻辑
response.send(返回数据);
})
// 同样可以使用app.route(rul).METHOD((req, res) => {})去处理同一路由不同的请求方法
app.route('/todos')
.get((req, res) => console.log('get todos'))
.post((req, res) => console.log('post todos'));
//监听端口3000
app.listen(3000, () => {
console.log('server running at http://localhost:3000')
})
/****************response的响应方法**********************/
response.send() // 返回响应内容
response.download() // 提示要进行下载
response.end() // 结束响应
response.json() // 返回json数据
response.jsonp() // 返回支持jsonp的
response.sendStatus() // 设置状态码
response.redirect() // 重定向
response.render() // 渲染视图
response.sendFile() // 发送文件
2.中间件(应用程序中间件、路由中间件、错误处理中间件、内置中间件、第三方中间件)
中间件是指在不修改原有功能的基础上,添加一些新的功能
// 不限制路由
app.use((req, res, next) => {
console.log('功能1');
next();
});
// 特定路由的中间件
app.use(url , (req, res, next) => handle());
// 限定请求方法和路由
app.METHOD(url, handle);
// 多个中间件函数
app.use(url, handle1, handle2);
/***要从路由器中间件堆栈中跳过其余中间件功能,请调用next('route')将控制权传递给下一条路由**/
路由中间件
// router.js文件中
const express = require('express');
const router = express.Router(); // 此时的router相当于一个简易的express实例
// 自定义中间件处理逻辑
router.use((req, res, next) => {})
module.exprots = router; // 导出
// app.js中
// 将router导入后挂载到app上
app.use(router); // 不加限制
app.use(url, router); // 限定路由前缀
错误处理中间件:接受四个参数(error, requset, response, next)
如果将任何内容传递给该next()
函数('route'
除外),Express都会将当前请求视为错误,并且将跳过所有剩余的非错误处理路由和中间件函数
404处理方式
app.use((req, res, next) => {
res.status(404).send('404 not found')
}); // 一般用在最后,表示其他的都没匹配上,就来匹配这个
内置中间件
express.json() //解析Content-Type为application/json格式的请求体
express.urlencoded() //解析Content-Type 为application/x-www-form-urlencoded格式的请求体
express.raw() //解析Content-Type为application/octet-stream格式的请求体
express.text()// 解析Content-Type为text/plain格式的请求体
express.static() //托管静态资源文件