express及常用API

核心就是中间件

概念

  • express 是TJ大神用Node.js封装的一个Web框架
  • 核心概念是中间件

编程模型

  • 使用app.use(fn)
  • 编程模型

主要的api类型

express(内置的中间件)

内置的中间件,返回的是一个函数。比如express.json()

常用的

const app = express()
app.use('/xxx',fn)
app.get('/xxx',fn)
app.post('/xxx',fn)
app.router('/xxx').all(fn1).get(fn2)

next

next()
next(error)

  • 自定义errorHandler
  • app.use((err,req,res,next) => {})
  • next('route')

api

express

  • 内置的中间件
  • express.json //用于处理请求体为JSON的请求
app.use(express.json())

app.use('/xxx',(req,res,next) => {
    console.log(req.body) //打印出来的是个JSON
})
//如果不写的话
app.use('/xxx',(req,res,next) => {
    console.log(req.body) //打印出来的是个undefined
    req.on('data',(chunk) => {
        chunk.toString()    
    })
})

  • express.static()
//获取当前目录下的public路径。注意:请求的时候就不需要带上/public这样的前缀了
app.use(express.static(path.join(__dirname, 'public')));
  • express.Router()


  • 其他的
    • express.row()//处理文件,二进制流
    • express.text()
    • express.urlencoded()

app

应用设置(模板配置、中间件、挂载路由)

  • app.locals //设置变量
app.locals.title = '标题啦'
  • set/get 优先推荐使用app.locals
app.set('case sensitive routing',true)//大小写敏感
app.set('views', path.join(__dirname, 'views'));//渲染的位置
app.set('view engine','ejs') //注意是view,而不是views
app.get('env')
  • app.get/post/put/delete
  • app.render
app.render(view, [locals], callback)
  • app.use
  • app的api


request

  • req.get('请求头属性')
app.get('/get', (req, res, next) => {
    console.log(req.get('User-Agent'));
    next();
});
  • req.params
//axios.get('/get/1/nick')
app.get('/get/:id/:name', (req, res, next) => {
    console.log(req.params); // {id:1 ,name: 'nick'}
    next();
});
  • req.query
//axios.get('/get?age=18')
app.get('/get', (req, res, next) => {
    console.log(req.query);// {age: 18}
    res.send('hello ,this is get method');
    next();
});
  • req.range()//分片,服务器是否支持范围请求
  • request.png


response

res.range //用来分片

res.append与res.set res.append

  • res.append 是往里加,加同样的头都会保留
  • res.set 是往里面设置,设置同样的只能保留一个

res.set

  • 分区

res.render()/res.download()

// send the rendered view to the client
res.render('index')

// if a callback is specified, the rendered HTML string has to be sent explicitly
res.render('index', function (err, html) {
  res.send(html)
})

// pass a local variable to the view
res.render('user', { name: 'Tobi' }, function (err, html) {
  // ...
})

res.download('/report-12345.pdf')

res.download('/report-12345.pdf', 'report.pdf')

res.download('/report-12345.pdf', 'report.pdf', function (err) {
  if (err) {
    // Handle error, but keep in mind the response may be partially-sent
    // so check res.headersSent
  } else {
    // decrement a download credit, etc.
  }
})

res.send()/ res.sendFile()

res.headersSent()

app.get('/', function (req, res) {
  console.dir(res.headersSent) // false
  res.send('OK')
  console.dir(res.headersSent) // true
})

res.status()

res.status(403).end()
res.status(400).send('Bad Request')
res.status(404).sendFile('/absolute/path/to/404.png')

res.set()/res.get()

res.set('Content-Type', 'text/plain')

res.set({
  'Content-Type': 'text/plain',
  'Content-Length': '123',
  ETag: '12345'
})

res.format()

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

  'text/html': function () {
    res.send('

hey

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

res.send跟res.write 不能同时使用

  • write是流式的操作
  • send是一次性的
  • response.png

express.Router

  • 就是一个阉割版的express
  • router.png

你可能感兴趣的:(express及常用API)