初学 Express

320 阅读2分钟

前言

对于一个有梦想的 div 工程师来说,后端,也是一个梦想的方向。那对于初接触后端的人来说,使用框架,无疑会大大降低学习的成本。expresskoa 都是业内非常著名的后端框架,这里就先来学习一下 Express

正文

express.xxx 相关 api

  • express.json() 正常情况下,通过 request.body 是无法直接拿到请求体的,因为请求数据是以流的形式传输的。因此在获取的时候,也要通过流的方式来获取
const express = require('express')
const app = express()

app.use('/', (request, response, next) => {
  response.send('hi')
  request.on('data', (chunk) => {
    console.log(chunk.toString())
  })
  next()
})

那这样写确实是有点麻烦,这时候就需要使用 express.json() 来帮助转换成 json 对象

app.use(express.json())

app.use('/', (request, response, next) => {
  response.send('hi')
  console.log(request.body)
  next()
})
  • express.static('yyy') 这个 api 会先去 yyy 目录下查找对应文件,如果没有的话,执行next,去匹配其他条件 大概逻辑:
if(有文件){
    sendFile('xxx')
}else{
    next()
}

app 相关 API

  • app.locals 设置变量,与 app.set 不同的是,app.locals 设置的值,在多个中间件中都可以使用

  • app.set / app.get 使用 app.set('env', 'xxx') 来设定 env 的值为 xxx

使用 app.get('env') 来获取这个设定的值

典型使用:app.set('case sensitive routing', true),设置路由匹配是否敏感,默认为 false,设置为 true 后会区分路由的大小写

request 相关 API

  • request.get() 用于获取请求头
  • request.param('name') 获取路由和查询字符串部分
  • request.range() 限制是否支持多线程下载和下载范围

response 相关 API

  • response.send()response.sendFile() 响应内容 / 响应文件
  • response.status() 设置 http 状态码
  • response.location 一般与 301 重定向状态码配合使用,重新定义请求路径,(可以用 response.redirect('/xxx') 来代替)

router 示例

//app.js
const express = require('express')
const app = express()
const user = require('./routers/user')
app.use('/user', user)

app.listen(3000, () => {
  console.log('监听了3000端口')
})
// routers/user.js
const express = require('express')
const router = express.Router()

router.get('/', (req, res) => {
  res.send('/user')
})
router.get('/:id', (req, res) => {
  res.send('/user/:id')
})
router.get('/:id/edit', (req, res) => {
  res.send('/user/:id/edit  ')
})

module.exports = router