相关资料
响应
1、其他响应
const epxress = require('express')
const app = express()
app.get('/other', (req, res) => {
res.redirect('http://www.baidu.com') // 302重定向
res.download(__dirname + '/package.json') // 下载响应
res.json({name: 'phxxhp'}) // 响应json
res.sendFile(__dirname + '/index.html')
})
中间件
工作原理:我现在的理解就是拦截器,本质:就是一个函数。
1、全局中间件
const epxress = require('express')
const fs = require('fs')
const path = require('path')
const app = express()
// 编写一个中间件,用来记录每一次访问的ip与url
const middleWareForRecordAsk = (req, res, next) => {
let { url, ip } = req;
fs.appendFileSync(path.resolve(__dirname, './access.log'), `${url} ${ip} \r\n`)
next() // 调用next,走后面的路由 了。
}
// 关键: 设置为全局中间件
app.use(middleWareForRecordAsk)
app.get('/home', (req, res) => {
res.redirect('http://www.baidu.com') // 302重定向
res.download(__dirname + '/package.json') // 下载响应
res.json({name: 'phxxhp'}) // 响应json
res.sendFile(__dirname + '/index.html')
})
2、路由中间件
const epxress = require('express')
const fs = require('fs')
const path = require('path')
const app = express()
// 编写一个中间件,用来记录每一次访问的ip与url
const middleWareForRecordAsk = (req, res, next) => {
let { url, ip } = req;
fs.appendFileSync(path.resolve(__dirname, './access.log'), `${url} ${ip} \r\n`)
next() // 调用next,走后面的路由 了。
}
// 关键: 路由中间件就是在对应路由将中间件函数传入对应的路由
app.get('/main', middleWareForRecordAsk, (req, res) => {
res.redirect('http://www.baidu.com') // 302重定向
res.download(__dirname + '/package.json') // 下载响应
res.json({name: 'phxxhp'}) // 响应json
res.sendFile(__dirname + '/index.html')
})
3、静态资源中间件
const epxress = require('express')
const path = require('path')
const app = express()
// 静态资源中间件
app.use(express.static(__dirname + '/public')) // 静态资源目录,这个中间件会为我们设置静态资源所对应的文件类型
app.all('*', middleWareForRecordAsk, (req, res) => {
res.send('404')
})
# 防盗链
防止外部网站使用本网站的资源,写一个中间件,判断当请求头的referer不为指定的域名,比如自己的网站域名时,返回404
```js
const epxress = require('express')
const fs = require('fs')
const path = require('path')
const app = express()
// 编写一个中间件,用来记录每一次访问的ip与url
const middleWareForProtect = (req, res, next) => {
let referer = req.get('referer')
if (referer !== 'www.myHostName.com') {
res.status(404).send('not found')
} else next()
}
app.use(middleWareForProtect)
路由
1、路由模块化
// router/main.js
const epxress = require('express')
const router = epxress.Router()
router.get('/main', (req, res) => {
})
// router/home.js
const epxress = require('express')
const router = epxress.Router()
router.get('/home', (req, res) => {
})
// app.js
const epxress = require('express')
const mainRouter = require('./router/main.js')
const homeRouter = require('./router/home.js')
const app = express()
app.use(mainRouter)
app.use(homeRouter)
express-generator
express脚手架,生成一整套express服务端模板。
formidable
用来处理用户的文件上传。