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

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

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

express.Router

  • 就是一个阉割版的express
  • router.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容