express.xxx 内置中间件
express 上具有一些api,作为内置的中间件,方便我们做一些处理。 例如:
- 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()
})
- 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()
})
-
express.raw() 与express.json类似,他处理的是二进制流
-
express.text() 与express.json类似,他处理的是文本
-
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()
})
app.xxx
- 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()
})
- 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)
- 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)
- app.all 表示 当访问 /allpath 路径时,不管请求方式是什么,都运行后面的回调
const express = require('express')
const app = express()
app.all('/allpath', (request,response,next) => {
response.send('/allpath')
})
-
app.delete / add.get 同3,接受的请求方式为delete
-
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('/')
})
- app.listen 监听某个端口
app.listen(3000,()=>{
console.log('listen port 3000')
})
- 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('/')
})
- 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'
- app.post 用与接受post请求
const express = require('express')
const app = express()
app.post('/index', (request,response,next)=>{
response.write('index')
response.end()
})
-
app.put 与 9 类似
-
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()
})
- 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
- 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!')
})
- 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
-
response.send 用于返回数据
-
response.render 常用于服务器模板渲染 将name传入html模板
res.render('user', { name: 'Tobi' }, function (err, html) {
// ...
})
- response.headersSent 指示应用程序是否为响应发送 HTTP 标头的布尔属性。
app.get('/', function (req, res) {
console.dir(res.headersSent) // false
res.send('OK')
console.dir(res.headersSent) // true
})
- response.status 用于设置响应的状态码
res.status(403).end()
res.status(400).send('Bad Request')
res.status(404).sendFile('/absolute/path/to/404.png')
-
response.set/get 用于设置/获取 响应头
-
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')
}
})