Express API 总结

117 阅读3分钟

express.xxx 内置中间件

express 上具有一些api,作为内置的中间件,方便我们做一些处理。 例如:

  1. express.json([options]) express.json 会将 post请求的请求体里的json自动转换为json放在request.body内给我们,而不需要我们去监听data事件
//原始方法
const express = require('express')
const app = express()

app.use('/home',(request,response,next)=>{
let list = []
request.on('data', (chunk) => {
  list.push(chunk)
})

request.on('end', () => {
  console.log(Buffer.concat(list).toString())
  response.end()
})

//使用express.json
app.use('/home',(request,response,next)=>{
  response.send(request.body.name)
  response.end()
})

image.png

  1. express.static(root, [options]) express.static 会为我们创建一个静态服务器,原来访问某个目录下的文件
const express = require('express')
const app = express()
app.use(express.static('public'))

app.use('/',(request,response,next)=>{
  response.end()
})

image.png

  1. express.raw() 与express.json类似,他处理的是二进制流

  2. express.text() 与express.json类似,他处理的是文本

  3. express.urlencoded 与express.json类似,他处理的是x-www-from-urlencoded格式的内容

const express = require('express')
const app = express()
app.use(express.urlencoded())

app.use('/', (request,response) => {
  response.send(request.body)
  response.end()
})

image.png

app.xxx

  1. app.locals app.locals相当于为这一个app创建了一个全局store,可以通过request.app.locals来访问上面的数据,与app.set类似。
//app.locals
const express = require('express')
const app = express()
app.locals.title = 'myTitle'

app.use('/', (request,response) => {
  response.send(request.app.locals.title)
  response.end()
})

//app.set
const express = require('express')
const app = express()
app.set('title', 'my-title')

app.use('/', (request,response) => {
  response.send(request.app.get('title'))
  response.end()
})
  1. app.mountpath 获取 (子)应用 / express实例 的挂载根路径
const express = require('express')
const app = express()
const admin = express()

admin.get('/', function (request, response, next) {
  response.send(admin.mountpath)
})

app.use('/admin', admin)
  1. app.on('mount',()=>{}) 当应用挂载以后触发(服务器启动时)
const express = require('express')
const app = express()
const admin = express()

admin.on('mount', (parent) => {
  console.log('----------')
  console.log(parent)
})

admin.use('/', (request,response,next) => {
  //触发 on mount
  console.log('admin')
  response.send('admin')
})

app.use('/admin', admin)
  1. app.all 表示 当访问 /allpath 路径时,不管请求方式是什么,都运行后面的回调
const express = require('express')
const app = express()

app.all('/allpath', (request,response,next) => {
  response.send('/allpath')
})
  1. app.delete / add.get 同3,接受的请求方式为delete

  2. app.disable app.disabled

const express = require('express')
const app = express()
app.set('x', true)

app.use('/', (request,response,next) => {
  console.log(response.app.get('x')) // true
  app.disable('x')
  console.log(response.app.get('x')) // false
  console.log(app.disabled('x')) // true
  app.enable('x')
  console.log(response.app.get('x')) // true
  console.log(app.enabled('x')) // true
  response.send('/')
})

image.png

  1. app.listen 监听某个端口
app.listen(3000,()=>{
  console.log('listen port 3000')
})
  1. app.param 对有某个参数路径进行过滤,执行一些事情
const express = require('express')
const app = express()

app.param('id', (request, response, next) => {
  // do something
  console.log('params')
  next()
})

app.use('/:id', (request,response,next) => {
  response.send('/')
})
  1. app.path 用于获取一个app实例的路径
const express = require('express')
const app = express()
const blog = express()
const blogAdmin = express()

app.use('/blog', blog)
blog.use('/admin', blogAdmin)

console.dir(app.path()) // ''
console.dir(blog.path()) // '/blog'
console.dir(blogAdmin.path()) // '/blog/admin'
  1. app.post 用与接受post请求
const express = require('express')
const app = express()

app.post('/index', (request,response,next)=>{
  response.write('index')
  response.end()
})
  1. app.put 与 9 类似

  2. app.render app.render 用于渲染非静态视图

const express = require('express')
const app = express()

app.set('views', 'views') //设置render使用的文件夹 ,默认views
app.set('view engine', 'ejs') //设置渲染引擎

app.get('/index', (request,response,next)=>{
  response.render('index',{title: 'index'})
  response.end()
})
  1. app.route

用于一个实例监听多个路由事件

const express = require('express')

const app = express()

app.route('/events')
  .all(function (req, res, next) {
    console.log(1)
    next()
  })
  .get(function (req, res, next) {
    res.json({})
    console.log(2)
  })
  .post(function (req, res, next) {
    // maybe add a new event...
    console.log(3)
    res.send()
  })
  
app.listen(3000, () => {
  console.log('listen 3000 success!')
})

request.xxx

  1. request.get 用于获取请求头
const express = require('express')

const app = express()

app.all('/', (request, response, next)=>{
  console.log(request.get('Content-Type'));
  response.end()
})

app.listen(3000, () => {
  console.log('listen 3000 success!')
})

image.png

  1. request.param 用于查询参数
const express = require('express')

const app = express()

app.all('/', (request, response, next)=>{
  console.log(request.param('name'));
  response.end()
})

app.listen(3000, () => {
  console.log('listen 3000 success!')
})

response.xxx

  1. response.send 用于返回数据

  2. response.render 常用于服务器模板渲染 将name传入html模板

res.render('user', { name: 'Tobi' }, function (err, html) {
  // ...
})
  1. response.headersSent 指示应用程序是否为响应发送 HTTP 标头的布尔属性。
app.get('/', function (req, res) {
  console.dir(res.headersSent) // false
  res.send('OK')
  console.dir(res.headersSent) // true
})
  1. response.status 用于设置响应的状态码
res.status(403).end()
res.status(400).send('Bad Request')
res.status(404).sendFile('/absolute/path/to/404.png')
  1. response.set/get 用于设置/获取 响应头

  2. response.format 根据不同的accept-type 返回不同的数据

res.format({
  'text/plain': function () {
    res.send('hey')
  },

  'text/html': function () {
    res.send('<p>hey</p>')
  },

  'application/json': function () {
    res.send({ message: 'hey' })
  },

  default: function () {
    // log the request and respond with 406
    res.status(406).send('Not Acceptable')
  }
})