1.express.xxx 为express函数内置的中间件
2.app.xxx 为express创建的app对象所具有的属性和方法
3.router.xxx 是跟路由相关的router对象的方法
4.request.xxx 是请求时的request对象所具有的方法
5.response.xxx 是响应时的response对象所具有的方法
express
express是express模块暴露出来的顶级函数,用于生成一个应用
----express内置的中间件
express.json 用来获取json格式的数据 可以再req.body中获取到
const app = express();
app.use(express.json());
app.post('/user',(req,res,next) => {
console.log(req.body); // {name:'hello'}
res.send('express.json')
})
express.row() 用来处理二进制数据
express.text() 用来处理文本数据
express.urlencoded() 用来处理&a=123&b=223这种格式的数据
-----express.static()
用来处理静态文件的获取
const publicPath = path.resolve(__dirname,'public');
app.use(express.static(publicPath));
http://localhost:3000/index.css
express会自动到public目录下查找,因此请求文件的url不要携带public目录名
----express.Router
用来创建一个新的router对象,这个路由对象可以像一个子应用一样设置路由
const router = express.Router();
router.get('/',(req,res) => {
res.send('blog');
})
app
app应用是express函数执行后得到的对象,核心就是app.use() 用于执行中间件;app.xxx等其他方法实际上都是app.use()的语法糖,即app.xxx等所有的功能都可以通过app.use()来实现
----app.all()
匹配所有路由,不区分请求方法
app.all("/user", (req, res, next) => {
console.log("hello");
next();
});
----app.get/post/put/delete
常见的路由请求方法
app.get("/user", (req, res, next) => {
console.log('get方法');
next();
});
app.post("/user", (req, res, next) => {
console.log('post方法');
res.send("app.get");
});
----app.set/get app.locals
app.set(name, value) 用于设置局部变量
app.get(name) 用于获取app.set()设置的变量
app.locals 用于设置局部变量 但是通过app.locals设置的局部变量在任何地方都可以被访问到 例如:app.locals.title = 'Hello,Express'; cosnole.log(app.locals.title);
set内置应用:
'env' 设置环境模式 app.set('env', process.env.NODE_ENV)
'etag' 设置ETag响应头
'jsonp callback name' 设置默认的JSONP回调名称
'views' 设置应用程序试图的目录或目录数组
'view engine' 设置模板引擎
----app.engine
express默认使用jade模板,但是同时支持其他的模板;因此如果要想使用其他模板,需要设置模板殷勤,例如:app.set('view engine', 'ejs')
'view engine' 表示使用的文件模板格式,如果设置为ejs,那么会默认去views下查找ejs文件,也只查找ejs文件,即这样设置后所有的views下的模板文件后缀都必须是ejs
const ejs = require('ejs');
// 设置视图模板格式
app.set('view engine', 'html');
// 设置html引擎 将ejs模板映射到html
app.engine("html", ejs.__express); // 使用ejs渲染html模板
app.engine()用于将模板映射成其他后缀文件
router
router可以看作是app的一个子应用,app对象所具有的功能基本上router对象也都可以使用
router对象只是为了更加方便路由的模块化管理
request.xxx 和 response.xxx
request是请求对象 response是响应对象
request和response的参数和方法大都和http相关
----req.baseUrl
指路由的挂载点
app.use('/user',user); // 路由挂载点是/user
user.get('/add',(req,res) => {
console.log(req.baseUrl); // req.baseUrl就是 /user
res.send('hello');
})
----req.originalUrl
用于获取完整的url路径地址
user.get('/add',(req,res) => {
console.log(req.baseUrl); // /user
console.log(req.originalUrl); // /user/add
res.send('hello');
})
----req.range
用于进行分片下载
var range = req.range(1000) 100个字节进行切片 一片一片地进行传输
// the type of the range
if (range.type === 'bytes') {
// the ranges
range.forEach(function (r) {
// do something with r.start and r.end
})
}