Express 总结

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'))
  })

你可能感兴趣的:(Express 总结)