Express 基本概念
子应用
var app = express() // 主应用
var admin = express() // 另外一个应用
app.use('/admin', admin) // admin 作子应用
挂载点
- "/admin" 就是 admin 的挂载点
Express API 总结
express.xxx - 内置中间件
json([option])
内置中间件,解析传入的请求
app.use(express.json())
app.use((request, response, next) => {
const jsonObj = request.body
})
static(root,[option])
内置中间件为,创建一个静态文件服务器,根据 req.url
来寻找对应的文件
text([option])
内置中间件,将传入的请求参数解析为字符串
Router([option])
创建一个 router 对象,对路由进行响应
app.xxx - 应用设置
app.set(name , value)
存储一个变量
app.get(name)
获取变量
app.get("/xxx", fn)
对 get /xxx 的响应
app.post / put /delete
对对应的的请求方法进行响应
app.use([path, ] callback [, callback])
使用中间件进行全局的处理
对应的路由进行响应
request.xxx - 操作请求
request.baseUrl
路由的 URL 路径
request.body
请求体
request.params
/user/:name 中 name 变量
request.path
example.com/user?id=1 => "/user"
request.query
/seatch?a=1&b=2 req.query.a => 1
request.get() // 获取请求头中信息
-
request.param()
// ?name=tobi req.param('name') // => "tobi"
respones.xxx - 操作响应
send([body])
res.send({ some: 'json' })
render(view [, locals] [, callback])
渲染view, 同时向callback 传入渲染后的字符串
res.render('user', { name: 'Tobi' }, function(err, html){
// ...
});
status()
设置状态码
set()
设置响应头
res.set({
'Content-Type': 'text/plain',
'Content-Length': '123',
'ETag': '12345'
})
format()
设置特定请求头的响应
res.format({
'text/plain': function(){
res.send('hey');
},
'text/html': function(){
res.send('hey');
},
'application/json': function(){
res.send({ message: 'hey' });
}
})
get()
返回一个大小写不敏感的响应头的值
res.get('Content-Type');
// "text/plain"
router.xxx - 操作路由
router.all(path, [callback, ... ] callback)
与 methods 相同,适配所有的方法
router.methods(path, fn)
get/post/put/delete/update 对应的请求方法进行响应
router.param(name, callback)
构造一个参数触发器,根据参数出发回调
即使参数在多个路由中匹配,在请求-响应周期中也仅会调用一次参数回调
router.param('id', function (req, res, next, id) {
console.log('CALLED ONLY ONCE')
next()
})
router.get('/user/:id', function (req, res, next) {
console.log('although this matches')
next()
})
router.get('/user/:id', function (req, res) {
console.log('and this matches too')
res.end()
})
/*print
CALLED ONLY ONCE
although this matches
and this matches too
*/
router.use([path], [function], funtion)
中间件的使用或者对路由的响应
router.route(path)
返回单个路由的实例,然后您可以使用该路由使用可选的中间件来处理HTTP动词。使用router.route()以避免重复请求的响应
router.route('/users/:user_id')
.all(function (req, res, next) {
// runs for all HTTP verbs first
// think of it as route specific middleware!
next()
})
.get(function (req, res, next) {
res.json(req.user)
})
.post(function (req, res, next) {
next(new Error('not implemented'))
})
.delete(function (req, res, next) {
next(new Error('not implemented'))
})